Mercurial > emacs
comparison src/xfns.c @ 53069:1218a42792ea
Implement multiple display handling for GTK.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Sun, 16 Nov 2003 16:05:24 +0000 |
parents | 8ea9dad9855f |
children | dd3018b4785b fe80edbc3909 |
comparison
equal
deleted
inserted
replaced
53068:6c9f84d07fa3 | 53069:1218a42792ea |
---|---|
306 return f; | 306 return f; |
307 #else /* not USE_X_TOOLKIT */ | 307 #else /* not USE_X_TOOLKIT */ |
308 #ifdef USE_GTK | 308 #ifdef USE_GTK |
309 if (f->output_data.x->edit_widget) | 309 if (f->output_data.x->edit_widget) |
310 { | 310 { |
311 GtkWidget *gwdesc = xg_win_to_widget (wdesc); | 311 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); |
312 struct x_output *x = f->output_data.x; | 312 struct x_output *x = f->output_data.x; |
313 if (gwdesc != 0 && gwdesc == x->edit_widget) | 313 if (gwdesc != 0 && gwdesc == x->edit_widget) |
314 return f; | 314 return f; |
315 } | 315 } |
316 #endif /* USE_GTK */ | 316 #endif /* USE_GTK */ |
350 if (x->hourglass_window == wdesc) | 350 if (x->hourglass_window == wdesc) |
351 found = f; | 351 found = f; |
352 else if (x->widget) | 352 else if (x->widget) |
353 { | 353 { |
354 #ifdef USE_GTK | 354 #ifdef USE_GTK |
355 GtkWidget *gwdesc = xg_win_to_widget (wdesc); | 355 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); |
356 if (gwdesc != 0 | 356 if (gwdesc != 0 |
357 && (gwdesc == x->widget | 357 && (gwdesc == x->widget |
358 || gwdesc == x->edit_widget | 358 || gwdesc == x->edit_widget |
359 || gwdesc == x->vbox_widget | 359 || gwdesc == x->vbox_widget |
360 || gwdesc == x->menubar_widget)) | 360 || gwdesc == x->menubar_widget)) |
402 if (x->hourglass_window == wdesc) | 402 if (x->hourglass_window == wdesc) |
403 return f; | 403 return f; |
404 else if (x->widget) | 404 else if (x->widget) |
405 { | 405 { |
406 #ifdef USE_GTK | 406 #ifdef USE_GTK |
407 GtkWidget *gwdesc = xg_win_to_widget (wdesc); | 407 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); |
408 if (gwdesc != 0 | 408 if (gwdesc != 0 |
409 && (gwdesc == x->widget | 409 && (gwdesc == x->widget |
410 || gwdesc == x->edit_widget | 410 || gwdesc == x->edit_widget |
411 || gwdesc == x->vbox_widget)) | 411 || gwdesc == x->vbox_widget)) |
412 return f; | 412 return f; |
446 x = f->output_data.x; | 446 x = f->output_data.x; |
447 /* Match if the window is this frame's menubar. */ | 447 /* Match if the window is this frame's menubar. */ |
448 #ifdef USE_GTK | 448 #ifdef USE_GTK |
449 if (x->menubar_widget) | 449 if (x->menubar_widget) |
450 { | 450 { |
451 GtkWidget *gwdesc = xg_win_to_widget (wdesc); | 451 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); |
452 int found = 0; | 452 int found = 0; |
453 | 453 |
454 BLOCK_INPUT; | 454 BLOCK_INPUT; |
455 if (gwdesc != 0 | 455 if (gwdesc != 0 |
456 && (gwdesc == x->menubar_widget | 456 && (gwdesc == x->menubar_widget |
492 | 492 |
493 if (x->widget) | 493 if (x->widget) |
494 { | 494 { |
495 /* This frame matches if the window is its topmost widget. */ | 495 /* This frame matches if the window is its topmost widget. */ |
496 #ifdef USE_GTK | 496 #ifdef USE_GTK |
497 GtkWidget *gwdesc = xg_win_to_widget (wdesc); | 497 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); |
498 if (gwdesc == x->widget) | 498 if (gwdesc == x->widget) |
499 return f; | 499 return f; |
500 #else | 500 #else |
501 if (wdesc == XtWindow (x->widget)) | 501 if (wdesc == XtWindow (x->widget)) |
502 return f; | 502 return f; |
760 | 760 |
761 /* Create a mask of a bitmap. Note is this not a perfect mask. | 761 /* Create a mask of a bitmap. Note is this not a perfect mask. |
762 It's nicer with some borders in this context */ | 762 It's nicer with some borders in this context */ |
763 | 763 |
764 int | 764 int |
765 x_create_bitmap_mask(f, id) | 765 x_create_bitmap_mask (f, id) |
766 struct frame *f; | 766 struct frame *f; |
767 int id; | 767 int id; |
768 { | 768 { |
769 Pixmap pixmap, mask; | 769 Pixmap pixmap, mask; |
770 XImage *ximg, *mask_img; | 770 XImage *ximg, *mask_img; |
778 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); | 778 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
779 | 779 |
780 if (!(id > 0)) | 780 if (!(id > 0)) |
781 return -1; | 781 return -1; |
782 | 782 |
783 pixmap = x_bitmap_pixmap(f, id); | 783 pixmap = x_bitmap_pixmap (f, id); |
784 width = x_bitmap_width(f, id); | 784 width = x_bitmap_width (f, id); |
785 height = x_bitmap_height(f, id); | 785 height = x_bitmap_height (f, id); |
786 | 786 |
787 BLOCK_INPUT; | 787 BLOCK_INPUT; |
788 ximg = XGetImage (FRAME_X_DISPLAY (f), pixmap, 0, 0, width, height, | 788 ximg = XGetImage (FRAME_X_DISPLAY (f), pixmap, 0, 0, width, height, |
789 ~0, ZPixmap); | 789 ~0, ZPixmap); |
790 | 790 |
797 result = x_create_x_image_and_pixmap (f, width, height, 1, &mask_img, &mask); | 797 result = x_create_x_image_and_pixmap (f, width, height, 1, &mask_img, &mask); |
798 | 798 |
799 UNBLOCK_INPUT; | 799 UNBLOCK_INPUT; |
800 if (!result) | 800 if (!result) |
801 { | 801 { |
802 XDestroyImage(ximg); | 802 XDestroyImage (ximg); |
803 return -1; | 803 return -1; |
804 } | 804 } |
805 | 805 |
806 bg = four_corners_best (ximg, width, height); | 806 bg = four_corners_best (ximg, width, height); |
807 | 807 |
836 | 836 |
837 dpyinfo->bitmaps[id - 1].have_mask = 1; | 837 dpyinfo->bitmaps[id - 1].have_mask = 1; |
838 dpyinfo->bitmaps[id - 1].mask = mask; | 838 dpyinfo->bitmaps[id - 1].mask = mask; |
839 | 839 |
840 XDestroyImage (ximg); | 840 XDestroyImage (ximg); |
841 x_destroy_x_image(mask_img); | 841 x_destroy_x_image (mask_img); |
842 | 842 |
843 return 0; | 843 return 0; |
844 } | 844 } |
845 | 845 |
846 static Lisp_Object unwind_create_frame P_ ((Lisp_Object)); | 846 static Lisp_Object unwind_create_frame P_ ((Lisp_Object)); |
1104 | 1104 |
1105 /* Set icon from FILE for frame F. By using GTK functions the icon | 1105 /* Set icon from FILE for frame F. By using GTK functions the icon |
1106 may be any format that GdkPixbuf knows about, i.e. not just bitmaps. */ | 1106 may be any format that GdkPixbuf knows about, i.e. not just bitmaps. */ |
1107 | 1107 |
1108 int | 1108 int |
1109 xg_set_icon(f, file) | 1109 xg_set_icon (f, file) |
1110 FRAME_PTR f; | 1110 FRAME_PTR f; |
1111 Lisp_Object file; | 1111 Lisp_Object file; |
1112 { | 1112 { |
1113 struct gcpro gcpro1; | 1113 struct gcpro gcpro1; |
1114 int result = 0; | 1114 int result = 0; |
2456 FRAME_BACKGROUND_PIXEL (f), | 2456 FRAME_BACKGROUND_PIXEL (f), |
2457 NULL); | 2457 NULL); |
2458 | 2458 |
2459 xic = XCreateIC (xim, | 2459 xic = XCreateIC (xim, |
2460 XNInputStyle, xic_style, | 2460 XNInputStyle, xic_style, |
2461 XNClientWindow, FRAME_X_WINDOW(f), | 2461 XNClientWindow, FRAME_X_WINDOW (f), |
2462 XNFocusWindow, FRAME_X_WINDOW(f), | 2462 XNFocusWindow, FRAME_X_WINDOW (f), |
2463 XNStatusAttributes, status_attr, | 2463 XNStatusAttributes, status_attr, |
2464 XNPreeditAttributes, preedit_attr, | 2464 XNPreeditAttributes, preedit_attr, |
2465 NULL); | 2465 NULL); |
2466 XFree (preedit_attr); | 2466 XFree (preedit_attr); |
2467 XFree (status_attr); | 2467 XFree (status_attr); |
2548 - FRAME_TOOLBAR_HEIGHT (f) | 2548 - FRAME_TOOLBAR_HEIGHT (f) |
2549 - FRAME_INTERNAL_BORDER_WIDTH (f)); | 2549 - FRAME_INTERNAL_BORDER_WIDTH (f)); |
2550 XFree (needed); | 2550 XFree (needed); |
2551 | 2551 |
2552 attr = XVaCreateNestedList (0, XNArea, &area, NULL); | 2552 attr = XVaCreateNestedList (0, XNArea, &area, NULL); |
2553 XSetICValues(xic, XNStatusAttributes, attr, NULL); | 2553 XSetICValues (xic, XNStatusAttributes, attr, NULL); |
2554 XFree (attr); | 2554 XFree (attr); |
2555 } | 2555 } |
2556 | 2556 |
2557 | 2557 |
2558 /* Set X fontset for XIC of frame F, using base font name | 2558 /* Set X fontset for XIC of frame F, using base font name |
2791 #ifdef HAVE_X_I18N | 2791 #ifdef HAVE_X_I18N |
2792 if (FRAME_XIC (f)) | 2792 if (FRAME_XIC (f)) |
2793 { | 2793 { |
2794 /* XIM server might require some X events. */ | 2794 /* XIM server might require some X events. */ |
2795 unsigned long fevent = NoEventMask; | 2795 unsigned long fevent = NoEventMask; |
2796 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL); | 2796 XGetICValues (FRAME_XIC (f), XNFilterEvents, &fevent, NULL); |
2797 attributes.event_mask |= fevent; | 2797 attributes.event_mask |= fevent; |
2798 } | 2798 } |
2799 #endif /* HAVE_X_I18N */ | 2799 #endif /* HAVE_X_I18N */ |
2800 | 2800 |
2801 attribute_mask = CWEventMask; | 2801 attribute_mask = CWEventMask; |
2845 create_frame_xic (f); | 2845 create_frame_xic (f); |
2846 if (FRAME_XIC (f)) | 2846 if (FRAME_XIC (f)) |
2847 { | 2847 { |
2848 /* XIM server might require some X events. */ | 2848 /* XIM server might require some X events. */ |
2849 unsigned long fevent = NoEventMask; | 2849 unsigned long fevent = NoEventMask; |
2850 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL); | 2850 XGetICValues (FRAME_XIC (f), XNFilterEvents, &fevent, NULL); |
2851 | 2851 |
2852 if (fevent != NoEventMask) | 2852 if (fevent != NoEventMask) |
2853 { | 2853 { |
2854 XSetWindowAttributes attributes; | 2854 XSetWindowAttributes attributes; |
2855 XWindowAttributes wattr; | 2855 XWindowAttributes wattr; |
2909 create_frame_xic (f); | 2909 create_frame_xic (f); |
2910 if (FRAME_XIC (f)) | 2910 if (FRAME_XIC (f)) |
2911 { | 2911 { |
2912 /* XIM server might require some X events. */ | 2912 /* XIM server might require some X events. */ |
2913 unsigned long fevent = NoEventMask; | 2913 unsigned long fevent = NoEventMask; |
2914 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL); | 2914 XGetICValues (FRAME_XIC (f), XNFilterEvents, &fevent, NULL); |
2915 attributes.event_mask |= fevent; | 2915 attributes.event_mask |= fevent; |
2916 attribute_mask = CWEventMask; | 2916 attribute_mask = CWEventMask; |
2917 XChangeWindowAttributes (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), | 2917 XChangeWindowAttributes (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
2918 attribute_mask, &attributes); | 2918 attribute_mask, &attributes); |
2919 } | 2919 } |
9164 current_gif_memory_src = &memsrc; | 9164 current_gif_memory_src = &memsrc; |
9165 memsrc.bytes = SDATA (specified_data); | 9165 memsrc.bytes = SDATA (specified_data); |
9166 memsrc.len = SBYTES (specified_data); | 9166 memsrc.len = SBYTES (specified_data); |
9167 memsrc.index = 0; | 9167 memsrc.index = 0; |
9168 | 9168 |
9169 gif = DGifOpen(&memsrc, gif_read_from_memory); | 9169 gif = DGifOpen (&memsrc, gif_read_from_memory); |
9170 if (!gif) | 9170 if (!gif) |
9171 { | 9171 { |
9172 image_error ("Cannot open memory source `%s'", img->spec, Qnil); | 9172 image_error ("Cannot open memory source `%s'", img->spec, Qnil); |
9173 UNGCPRO; | 9173 UNGCPRO; |
9174 return 0; | 9174 return 0; |