comparison src/scrollbar-x.c @ 288:e11d67e05968 r21-0b42

Import from CVS: tag r21-0b42
author cvs
date Mon, 13 Aug 2007 10:35:54 +0200
parents c42ec1d1cded
children 182f72e8cd0d
comparison
equal deleted inserted replaced
287:13a0bd77a29d 288:e11d67e05968
398 { 398 {
399 /* This function can GC */ 399 /* This function can GC */
400 scroll_event *data = (scroll_event *) client_data; 400 scroll_event *data = (scroll_event *) client_data;
401 struct device *d = get_device_from_display (XtDisplay (widget)); 401 struct device *d = get_device_from_display (XtDisplay (widget));
402 struct frame *f = x_any_window_to_frame (d, XtWindow (widget)); 402 struct frame *f = x_any_window_to_frame (d, XtWindow (widget));
403 Lisp_Object win; 403 Lisp_Object win, frame;
404 struct scrollbar_instance *instance; 404 struct scrollbar_instance *instance;
405 struct window_mirror *mirror; 405 struct window_mirror *mirror;
406 406
407 if (!f) 407 if (!f)
408 return; 408 return;
411 win = real_window (mirror, 1); 411 win = real_window (mirror, 1);
412 412
413 if (NILP (win)) 413 if (NILP (win))
414 return; 414 return;
415 instance = mirror->scrollbar_vertical_instance; 415 instance = mirror->scrollbar_vertical_instance;
416 frame = WINDOW_FRAME (XWINDOW (win));
416 417
417 /* It seems that this is necessary whenever signal_special_Xt_user_event() 418 /* It seems that this is necessary whenever signal_special_Xt_user_event()
418 is called. #### Why??? */ 419 is called. #### Why??? */
419 DEVICE_X_MOUSE_TIMESTAMP (d) = DEVICE_X_GLOBAL_MOUSE_TIMESTAMP (d); 420 DEVICE_X_MOUSE_TIMESTAMP (d) = DEVICE_X_GLOBAL_MOUSE_TIMESTAMP (d);
420 421
421 switch (data->action) 422 switch (data->action)
422 { 423 {
423 case SCROLLBAR_LINE_UP: 424 case SCROLLBAR_LINE_UP:
424 signal_special_Xt_user_event (win, Qscrollbar_line_up, win); 425 signal_special_Xt_user_event (frame, Qscrollbar_line_up, win);
425 break; 426 break;
426 427
427 case SCROLLBAR_LINE_DOWN: 428 case SCROLLBAR_LINE_DOWN:
428 signal_special_Xt_user_event (win, Qscrollbar_line_down, win); 429 signal_special_Xt_user_event (frame, Qscrollbar_line_down, win);
429 break; 430 break;
430 431
431 /* The Athena scrollbar paging behavior is that of xterms. 432 /* The Athena scrollbar paging behavior is that of xterms.
432 Depending on where you click the size of the page varies. 433 Depending on where you click the size of the page varies.
433 Motif always does a standard Emacs page. */ 434 Motif always does a standard Emacs page. */
440 double line = tmp * 441 double line = tmp *
441 (double) window_displayed_height (XWINDOW (win)); 442 (double) window_displayed_height (XWINDOW (win));
442 443
443 if (line > -1.0) 444 if (line > -1.0)
444 line = -1.0; 445 line = -1.0;
445 signal_special_Xt_user_event (win, Qscrollbar_page_up, 446 signal_special_Xt_user_event (frame, Qscrollbar_page_up,
446 Fcons (win, make_int ((int) line))); 447 Fcons (win, make_int ((int) line)));
447 } 448 }
448 #else 449 #else
449 signal_special_Xt_user_event (win, Qscrollbar_page_up, 450 signal_special_Xt_user_event (frame, Qscrollbar_page_up,
450 Fcons (win, Qnil)); 451 Fcons (win, Qnil));
451 #endif 452 #endif
452 break; 453 break;
453 454
454 case SCROLLBAR_PAGE_DOWN: 455 case SCROLLBAR_PAGE_DOWN:
463 if (SCROLLBAR_X_POS_DATA(instance).maximum > 464 if (SCROLLBAR_X_POS_DATA(instance).maximum >
464 (SCROLLBAR_X_POS_DATA(instance).slider_size + SCROLLBAR_X_POS_DATA(instance).slider_position)) 465 (SCROLLBAR_X_POS_DATA(instance).slider_size + SCROLLBAR_X_POS_DATA(instance).slider_position))
465 { 466 {
466 if (line < 1.0) 467 if (line < 1.0)
467 line = 1.0; 468 line = 1.0;
468 signal_special_Xt_user_event (win, Qscrollbar_page_down, 469 signal_special_Xt_user_event (frame, Qscrollbar_page_down,
469 Fcons (win, 470 Fcons (win,
470 make_int ((int) line))); 471 make_int ((int) line)));
471 } 472 }
472 } 473 }
473 #else 474 #else
474 signal_special_Xt_user_event (win, Qscrollbar_page_down, 475 signal_special_Xt_user_event (frame, Qscrollbar_page_down,
475 Fcons (win, Qnil)); 476 Fcons (win, Qnil));
476 #endif 477 #endif
477 break; 478 break;
478 479
479 case SCROLLBAR_TOP: 480 case SCROLLBAR_TOP:
480 signal_special_Xt_user_event (win, Qscrollbar_to_top, win); 481 signal_special_Xt_user_event (frame, Qscrollbar_to_top, win);
481 break; 482 break;
482 483
483 case SCROLLBAR_BOTTOM: 484 case SCROLLBAR_BOTTOM:
484 signal_special_Xt_user_event (win, Qscrollbar_to_bottom, win); 485 signal_special_Xt_user_event (frame, Qscrollbar_to_bottom, win);
485 break; 486 break;
486 487
487 488
488 case SCROLLBAR_CHANGE: 489 case SCROLLBAR_CHANGE:
489 inhibit_slider_size_change = 0; 490 inhibit_slider_size_change = 0;
581 if (value >= SCROLLBAR_X_POS_DATA (instance).maximum) 582 if (value >= SCROLLBAR_X_POS_DATA (instance).maximum)
582 value = SCROLLBAR_X_POS_DATA (instance).maximum - 1; 583 value = SCROLLBAR_X_POS_DATA (instance).maximum - 1;
583 if (value < SCROLLBAR_X_POS_DATA (instance).minimum) 584 if (value < SCROLLBAR_X_POS_DATA (instance).minimum)
584 value = SCROLLBAR_X_POS_DATA (instance).minimum; 585 value = SCROLLBAR_X_POS_DATA (instance).minimum;
585 586
586 signal_special_Xt_user_event (win, Qscrollbar_vertical_drag, 587 signal_special_Xt_user_event (frame, Qscrollbar_vertical_drag,
587 Fcons (win, make_int (value))); 588 Fcons (win, make_int (value)));
588 } 589 }
589 break; 590 break;
590 591
591 } 592 }
601 XtPointer client_data) 602 XtPointer client_data)
602 { 603 {
603 scroll_event *data = (scroll_event *) client_data; 604 scroll_event *data = (scroll_event *) client_data;
604 struct device *d = get_device_from_display (XtDisplay (widget)); 605 struct device *d = get_device_from_display (XtDisplay (widget));
605 struct frame *f = x_any_window_to_frame (d, XtWindow (widget)); 606 struct frame *f = x_any_window_to_frame (d, XtWindow (widget));
606 Lisp_Object win; 607 Lisp_Object win, frame;
607 struct window_mirror *mirror; 608 struct window_mirror *mirror;
608 609
609 if (!f) 610 if (!f)
610 return; 611 return;
611 612
612 mirror = find_scrollbar_window_mirror (f, id); 613 mirror = find_scrollbar_window_mirror (f, id);
613 win = real_window (mirror, 1); 614 win = real_window (mirror, 1);
614 615
615 if (NILP (win)) 616 if (NILP (win))
616 return; 617 return;
618 frame = WINDOW_FRAME (XWINDOW (win));
617 619
618 /* It seems that this is necessary whenever signal_special_Xt_user_event() 620 /* It seems that this is necessary whenever signal_special_Xt_user_event()
619 is called. #### Why??? */ 621 is called. #### Why??? */
620 DEVICE_X_MOUSE_TIMESTAMP (d) = DEVICE_X_GLOBAL_MOUSE_TIMESTAMP (d); 622 DEVICE_X_MOUSE_TIMESTAMP (d) = DEVICE_X_GLOBAL_MOUSE_TIMESTAMP (d);
621 623
622 switch (data->action) 624 switch (data->action)
623 { 625 {
624 case SCROLLBAR_LINE_UP: 626 case SCROLLBAR_LINE_UP:
625 signal_special_Xt_user_event (win, Qscrollbar_char_left, win); 627 signal_special_Xt_user_event (frame, Qscrollbar_char_left, win);
626 break; 628 break;
627 case SCROLLBAR_LINE_DOWN: 629 case SCROLLBAR_LINE_DOWN:
628 signal_special_Xt_user_event (win, Qscrollbar_char_right, win); 630 signal_special_Xt_user_event (frame, Qscrollbar_char_right, win);
629 break; 631 break;
630 case SCROLLBAR_PAGE_UP: 632 case SCROLLBAR_PAGE_UP:
631 signal_special_Xt_user_event (win, Qscrollbar_page_left, win); 633 signal_special_Xt_user_event (frame, Qscrollbar_page_left, win);
632 break; 634 break;
633 case SCROLLBAR_PAGE_DOWN: 635 case SCROLLBAR_PAGE_DOWN:
634 signal_special_Xt_user_event (win, Qscrollbar_page_right, win); 636 signal_special_Xt_user_event (frame, Qscrollbar_page_right, win);
635 break; 637 break;
636 case SCROLLBAR_TOP: 638 case SCROLLBAR_TOP:
637 signal_special_Xt_user_event (win, Qscrollbar_to_left, win); 639 signal_special_Xt_user_event (frame, Qscrollbar_to_left, win);
638 break; 640 break;
639 case SCROLLBAR_BOTTOM: 641 case SCROLLBAR_BOTTOM:
640 signal_special_Xt_user_event (win, Qscrollbar_to_right, win); 642 signal_special_Xt_user_event (frame, Qscrollbar_to_right, win);
641 break; 643 break;
642 case SCROLLBAR_CHANGE: 644 case SCROLLBAR_CHANGE:
643 inhibit_slider_size_change = 0; 645 inhibit_slider_size_change = 0;
644 break; 646 break;
645 case SCROLLBAR_DRAG: 647 case SCROLLBAR_DRAG:
646 inhibit_slider_size_change = 1; 648 inhibit_slider_size_change = 1;
647 /* #### Fix the damn toolkit code so they all work the same way. 649 /* #### Fix the damn toolkit code so they all work the same way.
648 Lucid is the one mostly wrong.*/ 650 Lucid is the one mostly wrong.*/
649 #if defined (LWLIB_SCROLLBARS_LUCID) || defined (LWLIB_SCROLLBARS_ATHENA3D) 651 #if defined (LWLIB_SCROLLBARS_LUCID) || defined (LWLIB_SCROLLBARS_ATHENA3D)
650 signal_special_Xt_user_event (win, Qscrollbar_horizontal_drag, 652 signal_special_Xt_user_event (frame, Qscrollbar_horizontal_drag,
651 (Fcons 653 (Fcons
652 (win, make_int (data->slider_value)))); 654 (win, make_int (data->slider_value))));
653 #else 655 #else
654 signal_special_Xt_user_event (win, Qscrollbar_horizontal_drag, 656 signal_special_Xt_user_event (frame, Qscrollbar_horizontal_drag,
655 (Fcons 657 (Fcons
656 (win, 658 (win,
657 make_int (data->slider_value - 1)))); 659 make_int (data->slider_value - 1))));
658 #endif 660 #endif
659 break; 661 break;