diff options
| author | Jan Djärv | 2012-07-05 17:44:53 +0200 |
|---|---|---|
| committer | Jan Djärv | 2012-07-05 17:44:53 +0200 |
| commit | 383b7c95b8de833f11de2da6abbbc69120c156cd (patch) | |
| tree | afbd3d27e08a2ea2ec95d4e2cd5a4959ddfca2e5 /src | |
| parent | ea2ac79792ff8720f16ae72118e42e81c46d4653 (diff) | |
| download | emacs-383b7c95b8de833f11de2da6abbbc69120c156cd.tar.gz emacs-383b7c95b8de833f11de2da6abbbc69120c156cd.zip | |
Don't use deprecated functions when compiling with Gtk3.
* gtkutil.c (gtk_scrollbar_new, gtk_box_new): Define when HAVE_GTK3 is
not defined (Bug#11768).
(xg_create_frame_widgets): Use gtk_plug_new_for_display (Bug#11768).
(xg_create_frame_widgets, create_dialog, xg_get_file_with_chooser)
(make_widget_for_menu_item, xg_make_tool_item): Use gtk_box_new
followed by gtk_box_set_homogeneous (Bug#11768).
(xg_update_menu_item): Use GTK_IS_BOX (Bug#11768).
(update_theme_scrollbar_width, xg_create_scroll_bar): Use
gtk_scrollbar_new (Bug#11768).
(xg_event_is_for_scrollbar): Use Gdk Device functions for HAVE_GTK3.
(is_box_type): New function (Bug#11768).
(xg_tool_item_stale_p): Call is_box_type.
(xg_initialize): Get settings by calling gtk_settings_get_for_screen
with default display (Bug#11768).
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 17 | ||||
| -rw-r--r-- | src/gtkutil.c | 87 |
2 files changed, 85 insertions, 19 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 6c3810c6bac..1cdd6c07b47 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,20 @@ | |||
| 1 | 2012-07-05 Jan Djärv <jan.h.d@swipnet.se> | ||
| 2 | |||
| 3 | * gtkutil.c (gtk_scrollbar_new, gtk_box_new): Define when HAVE_GTK3 is | ||
| 4 | not defined (Bug#11768). | ||
| 5 | (xg_create_frame_widgets): Use gtk_plug_new_for_display (Bug#11768). | ||
| 6 | (xg_create_frame_widgets, create_dialog, xg_get_file_with_chooser) | ||
| 7 | (make_widget_for_menu_item, xg_make_tool_item): Use gtk_box_new | ||
| 8 | followed by gtk_box_set_homogeneous (Bug#11768). | ||
| 9 | (xg_update_menu_item): Use GTK_IS_BOX (Bug#11768). | ||
| 10 | (update_theme_scrollbar_width, xg_create_scroll_bar): Use | ||
| 11 | gtk_scrollbar_new (Bug#11768). | ||
| 12 | (xg_event_is_for_scrollbar): Use Gdk Device functions for HAVE_GTK3. | ||
| 13 | (is_box_type): New function (Bug#11768). | ||
| 14 | (xg_tool_item_stale_p): Call is_box_type. | ||
| 15 | (xg_initialize): Get settings by calling gtk_settings_get_for_screen | ||
| 16 | with default display (Bug#11768). | ||
| 17 | |||
| 1 | 2012-07-05 Eli Zaretskii <eliz@gnu.org> | 18 | 2012-07-05 Eli Zaretskii <eliz@gnu.org> |
| 2 | 19 | ||
| 3 | * xdisp.c (window_hscroll_limited): New function. | 20 | * xdisp.c (window_hscroll_limited): New function. |
diff --git a/src/gtkutil.c b/src/gtkutil.c index 4f727ec6fa3..25a81c45436 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -83,10 +83,16 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 83 | gdk_window_get_geometry (w, a, b, c, d, 0) | 83 | gdk_window_get_geometry (w, a, b, c, d, 0) |
| 84 | #define gdk_x11_window_lookup_for_display(d, w) \ | 84 | #define gdk_x11_window_lookup_for_display(d, w) \ |
| 85 | gdk_xid_table_lookup_for_display (d, w) | 85 | gdk_xid_table_lookup_for_display (d, w) |
| 86 | #define gtk_box_new(ori, spacing) \ | ||
| 87 | ((ori) == GTK_ORIENTATION_HORIZONTAL \ | ||
| 88 | ? gtk_hbox_new (FALSE, (spacing)) : gtk_vbox_new (FALSE, (spacing))) | ||
| 89 | #define gtk_scrollbar_new(ori, spacing) \ | ||
| 90 | ((ori) == GTK_ORIENTATION_HORIZONTAL \ | ||
| 91 | ? gtk_hscrollbar_new ((spacing)) : gtk_vscrollbar_new ((spacing))) | ||
| 86 | #ifndef GDK_KEY_g | 92 | #ifndef GDK_KEY_g |
| 87 | #define GDK_KEY_g GDK_g | 93 | #define GDK_KEY_g GDK_g |
| 88 | #endif | 94 | #endif |
| 89 | #endif | 95 | #endif /* HAVE_GTK3 */ |
| 90 | 96 | ||
| 91 | #define XG_BIN_CHILD(x) gtk_bin_get_child (GTK_BIN (x)) | 97 | #define XG_BIN_CHILD(x) gtk_bin_get_child (GTK_BIN (x)) |
| 92 | 98 | ||
| @@ -1097,7 +1103,10 @@ xg_create_frame_widgets (FRAME_PTR f) | |||
| 1097 | BLOCK_INPUT; | 1103 | BLOCK_INPUT; |
| 1098 | 1104 | ||
| 1099 | if (FRAME_X_EMBEDDED_P (f)) | 1105 | if (FRAME_X_EMBEDDED_P (f)) |
| 1100 | wtop = gtk_plug_new (f->output_data.x->parent_desc); | 1106 | { |
| 1107 | GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f)); | ||
| 1108 | wtop = gtk_plug_new_for_display (gdpy, f->output_data.x->parent_desc); | ||
| 1109 | } | ||
| 1101 | else | 1110 | else |
| 1102 | wtop = gtk_window_new (GTK_WINDOW_TOPLEVEL); | 1111 | wtop = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
| 1103 | 1112 | ||
| @@ -1111,8 +1120,10 @@ xg_create_frame_widgets (FRAME_PTR f) | |||
| 1111 | 1120 | ||
| 1112 | xg_set_screen (wtop, f); | 1121 | xg_set_screen (wtop, f); |
| 1113 | 1122 | ||
| 1114 | wvbox = gtk_vbox_new (FALSE, 0); | 1123 | wvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); |
| 1115 | whbox = gtk_hbox_new (FALSE, 0); | 1124 | whbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); |
| 1125 | gtk_box_set_homogeneous (GTK_BOX (wvbox), FALSE); | ||
| 1126 | gtk_box_set_homogeneous (GTK_BOX (whbox), FALSE); | ||
| 1116 | 1127 | ||
| 1117 | #ifdef HAVE_GTK3 | 1128 | #ifdef HAVE_GTK3 |
| 1118 | wfixed = emacs_fixed_new (f); | 1129 | wfixed = emacs_fixed_new (f); |
| @@ -1487,9 +1498,12 @@ create_dialog (widget_value *wv, | |||
| 1487 | 1498 | ||
| 1488 | if (make_two_rows) | 1499 | if (make_two_rows) |
| 1489 | { | 1500 | { |
| 1490 | GtkWidget *wvbox = gtk_vbox_new (TRUE, button_spacing); | 1501 | GtkWidget *wvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, button_spacing); |
| 1491 | GtkWidget *whbox_up = gtk_hbox_new (FALSE, 0); | 1502 | GtkWidget *whbox_up = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); |
| 1492 | whbox_down = gtk_hbox_new (FALSE, 0); | 1503 | gtk_box_set_homogeneous (GTK_BOX (wvbox), TRUE); |
| 1504 | gtk_box_set_homogeneous (GTK_BOX (whbox_up), FALSE); | ||
| 1505 | whbox_down = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); | ||
| 1506 | gtk_box_set_homogeneous (GTK_BOX (whbox_down), FALSE); | ||
| 1493 | 1507 | ||
| 1494 | gtk_box_pack_start (cur_box, wvbox, FALSE, FALSE, 0); | 1508 | gtk_box_pack_start (cur_box, wvbox, FALSE, FALSE, 0); |
| 1495 | gtk_box_pack_start (GTK_BOX (wvbox), whbox_up, FALSE, FALSE, 0); | 1509 | gtk_box_pack_start (GTK_BOX (wvbox), whbox_up, FALSE, FALSE, 0); |
| @@ -1777,7 +1791,8 @@ xg_get_file_with_chooser (FRAME_PTR f, | |||
| 1777 | NULL); | 1791 | NULL); |
| 1778 | gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (filewin), TRUE); | 1792 | gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (filewin), TRUE); |
| 1779 | 1793 | ||
| 1780 | wbox = gtk_vbox_new (FALSE, 0); | 1794 | wbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); |
| 1795 | gtk_box_set_homogeneous (GTK_BOX (wbox), FALSE); | ||
| 1781 | gtk_widget_show (wbox); | 1796 | gtk_widget_show (wbox); |
| 1782 | wtoggle = gtk_check_button_new_with_label ("Show hidden files."); | 1797 | wtoggle = gtk_check_button_new_with_label ("Show hidden files."); |
| 1783 | 1798 | ||
| @@ -2189,7 +2204,8 @@ make_widget_for_menu_item (const char *utf8_label, const char *utf8_key) | |||
| 2189 | GtkWidget *wkey; | 2204 | GtkWidget *wkey; |
| 2190 | GtkWidget *wbox; | 2205 | GtkWidget *wbox; |
| 2191 | 2206 | ||
| 2192 | wbox = gtk_hbox_new (FALSE, 0); | 2207 | wbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); |
| 2208 | gtk_box_set_homogeneous (GTK_BOX (wbox), FALSE); | ||
| 2193 | wlbl = gtk_label_new (utf8_label); | 2209 | wlbl = gtk_label_new (utf8_label); |
| 2194 | wkey = gtk_label_new (utf8_key); | 2210 | wkey = gtk_label_new (utf8_key); |
| 2195 | 2211 | ||
| @@ -2846,7 +2862,7 @@ xg_update_menu_item (widget_value *val, | |||
| 2846 | utf8_key = get_utf8_string (val->key); | 2862 | utf8_key = get_utf8_string (val->key); |
| 2847 | 2863 | ||
| 2848 | /* See if W is a menu item with a key. See make_menu_item above. */ | 2864 | /* See if W is a menu item with a key. See make_menu_item above. */ |
| 2849 | if (GTK_IS_HBOX (wchild)) | 2865 | if (GTK_IS_BOX (wchild)) |
| 2850 | { | 2866 | { |
| 2851 | GList *list = gtk_container_get_children (GTK_CONTAINER (wchild)); | 2867 | GList *list = gtk_container_get_children (GTK_CONTAINER (wchild)); |
| 2852 | 2868 | ||
| @@ -3400,7 +3416,7 @@ update_theme_scrollbar_width (void) | |||
| 3400 | int w = 0, b = 0; | 3416 | int w = 0, b = 0; |
| 3401 | 3417 | ||
| 3402 | vadj = gtk_adjustment_new (XG_SB_MIN, XG_SB_MIN, XG_SB_MAX, 0.1, 0.1, 0.1); | 3418 | vadj = gtk_adjustment_new (XG_SB_MIN, XG_SB_MIN, XG_SB_MAX, 0.1, 0.1, 0.1); |
| 3403 | wscroll = gtk_vscrollbar_new (GTK_ADJUSTMENT (vadj)); | 3419 | wscroll = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT (vadj)); |
| 3404 | g_object_ref_sink (G_OBJECT (wscroll)); | 3420 | g_object_ref_sink (G_OBJECT (wscroll)); |
| 3405 | gtk_widget_style_get (wscroll, "slider-width", &w, "trough-border", &b, NULL); | 3421 | gtk_widget_style_get (wscroll, "slider-width", &w, "trough-border", &b, NULL); |
| 3406 | gtk_widget_destroy (wscroll); | 3422 | gtk_widget_destroy (wscroll); |
| @@ -3477,7 +3493,7 @@ xg_create_scroll_bar (FRAME_PTR f, | |||
| 3477 | vadj = gtk_adjustment_new (XG_SB_MIN, XG_SB_MIN, XG_SB_MAX, | 3493 | vadj = gtk_adjustment_new (XG_SB_MIN, XG_SB_MIN, XG_SB_MAX, |
| 3478 | 0.1, 0.1, 0.1); | 3494 | 0.1, 0.1, 0.1); |
| 3479 | 3495 | ||
| 3480 | wscroll = gtk_vscrollbar_new (GTK_ADJUSTMENT (vadj)); | 3496 | wscroll = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT (vadj)); |
| 3481 | webox = gtk_event_box_new (); | 3497 | webox = gtk_event_box_new (); |
| 3482 | gtk_widget_set_name (wscroll, scroll_bar_name); | 3498 | gtk_widget_set_name (wscroll, scroll_bar_name); |
| 3483 | #ifndef HAVE_GTK3 | 3499 | #ifndef HAVE_GTK3 |
| @@ -3710,8 +3726,15 @@ xg_event_is_for_scrollbar (FRAME_PTR f, XEvent *event) | |||
| 3710 | { | 3726 | { |
| 3711 | /* Check if press occurred outside the edit widget. */ | 3727 | /* Check if press occurred outside the edit widget. */ |
| 3712 | GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f)); | 3728 | GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f)); |
| 3713 | retval = gdk_display_get_window_at_pointer (gdpy, NULL, NULL) | 3729 | GdkWindow *gwin; |
| 3714 | != gtk_widget_get_window (f->output_data.x->edit_widget); | 3730 | #ifdef HAVE_GTK3 |
| 3731 | GdkDevice *gdev = gdk_device_manager_get_client_pointer | ||
| 3732 | (gdk_display_get_device_manager (gdpy)); | ||
| 3733 | gdk_device_get_window_at_position (gdev, NULL, NULL); | ||
| 3734 | #else | ||
| 3735 | gwin = gdk_display_get_window_at_pointer (gdpy, NULL, NULL); | ||
| 3736 | #endif | ||
| 3737 | retval = gwin != gtk_widget_get_window (f->output_data.x->edit_widget); | ||
| 3715 | } | 3738 | } |
| 3716 | else if (f | 3739 | else if (f |
| 3717 | && ((event->type == ButtonRelease && event->xbutton.button < 4) | 3740 | && ((event->type == ButtonRelease && event->xbutton.button < 4) |
| @@ -4232,11 +4255,16 @@ xg_make_tool_item (FRAME_PTR f, | |||
| 4232 | int i, int horiz, int text_image) | 4255 | int i, int horiz, int text_image) |
| 4233 | { | 4256 | { |
| 4234 | GtkToolItem *ti = gtk_tool_item_new (); | 4257 | GtkToolItem *ti = gtk_tool_item_new (); |
| 4235 | GtkWidget *vb = horiz ? gtk_hbox_new (FALSE, 0) : gtk_vbox_new (FALSE, 0); | 4258 | GtkWidget *vb = gtk_box_new (horiz |
| 4259 | ? GTK_ORIENTATION_HORIZONTAL | ||
| 4260 | : GTK_ORIENTATION_VERTICAL, | ||
| 4261 | 0); | ||
| 4236 | GtkWidget *wb = gtk_button_new (); | 4262 | GtkWidget *wb = gtk_button_new (); |
| 4237 | /* The eventbox is here so we can have tooltips on disabled items. */ | 4263 | /* The eventbox is here so we can have tooltips on disabled items. */ |
| 4238 | GtkWidget *weventbox = gtk_event_box_new (); | 4264 | GtkWidget *weventbox = gtk_event_box_new (); |
| 4239 | 4265 | ||
| 4266 | gtk_box_set_homogeneous (GTK_BOX (vb), FALSE); | ||
| 4267 | |||
| 4240 | if (wimage && !text_image) | 4268 | if (wimage && !text_image) |
| 4241 | gtk_box_pack_start (GTK_BOX (vb), wimage, TRUE, TRUE, 0); | 4269 | gtk_box_pack_start (GTK_BOX (vb), wimage, TRUE, TRUE, 0); |
| 4242 | if (label) | 4270 | if (label) |
| @@ -4304,6 +4332,24 @@ xg_make_tool_item (FRAME_PTR f, | |||
| 4304 | } | 4332 | } |
| 4305 | 4333 | ||
| 4306 | static int | 4334 | static int |
| 4335 | is_box_type (GtkWidget *vb, int is_horizontal) | ||
| 4336 | { | ||
| 4337 | #ifdef HAVE_GTK3 | ||
| 4338 | int ret = 0; | ||
| 4339 | if (GTK_IS_BOX (vb)) | ||
| 4340 | { | ||
| 4341 | GtkOrientation ori = gtk_orientable_get_orientation (GTK_ORIENTABLE (vb)); | ||
| 4342 | ret = (ori == GTK_ORIENTATION_HORIZONTAL && is_horizontal) | ||
| 4343 | || (ori == GTK_ORIENTATION_VERTICAL && ! is_horizontal); | ||
| 4344 | } | ||
| 4345 | return ret; | ||
| 4346 | #else | ||
| 4347 | return is_horizontal ? GTK_IS_VBOX (vb) : GTK_IS_HBOX (vb); | ||
| 4348 | #endif | ||
| 4349 | } | ||
| 4350 | |||
| 4351 | |||
| 4352 | static int | ||
| 4307 | xg_tool_item_stale_p (GtkWidget *wbutton, const char *stock_name, | 4353 | xg_tool_item_stale_p (GtkWidget *wbutton, const char *stock_name, |
| 4308 | const char *icon_name, const struct image *img, | 4354 | const char *icon_name, const struct image *img, |
| 4309 | const char *label, int horiz) | 4355 | const char *label, int horiz) |
| @@ -4331,14 +4377,14 @@ xg_tool_item_stale_p (GtkWidget *wbutton, const char *stock_name, | |||
| 4331 | else if (wimage) | 4377 | else if (wimage) |
| 4332 | { | 4378 | { |
| 4333 | gpointer gold_img = g_object_get_data (G_OBJECT (wimage), | 4379 | gpointer gold_img = g_object_get_data (G_OBJECT (wimage), |
| 4334 | XG_TOOL_BAR_IMAGE_DATA); | 4380 | XG_TOOL_BAR_IMAGE_DATA); |
| 4335 | Pixmap old_img = (Pixmap) gold_img; | 4381 | Pixmap old_img = (Pixmap) gold_img; |
| 4336 | if (old_img != img->pixmap) | 4382 | if (old_img != img->pixmap) |
| 4337 | return 1; | 4383 | return 1; |
| 4338 | } | 4384 | } |
| 4339 | 4385 | ||
| 4340 | /* Check button configuration and label. */ | 4386 | /* Check button configuration and label. */ |
| 4341 | if ((horiz ? GTK_IS_VBOX (vb) : GTK_IS_HBOX (vb)) | 4387 | if (is_box_type (vb, horiz) |
| 4342 | || (label ? (wlbl == NULL) : (wlbl != NULL))) | 4388 | || (label ? (wlbl == NULL) : (wlbl != NULL))) |
| 4343 | return 1; | 4389 | return 1; |
| 4344 | 4390 | ||
| @@ -4715,6 +4761,7 @@ void | |||
| 4715 | xg_initialize (void) | 4761 | xg_initialize (void) |
| 4716 | { | 4762 | { |
| 4717 | GtkBindingSet *binding_set; | 4763 | GtkBindingSet *binding_set; |
| 4764 | GtkSettings *settings; | ||
| 4718 | 4765 | ||
| 4719 | #if HAVE_XFT | 4766 | #if HAVE_XFT |
| 4720 | /* Work around a bug with corrupted data if libXft gets unloaded. This way | 4767 | /* Work around a bug with corrupted data if libXft gets unloaded. This way |
| @@ -4731,17 +4778,19 @@ xg_initialize (void) | |||
| 4731 | id_to_widget.max_size = id_to_widget.used = 0; | 4778 | id_to_widget.max_size = id_to_widget.used = 0; |
| 4732 | id_to_widget.widgets = 0; | 4779 | id_to_widget.widgets = 0; |
| 4733 | 4780 | ||
| 4781 | settings = gtk_settings_get_for_screen (gdk_display_get_default_screen | ||
| 4782 | (gdk_display_get_default ())); | ||
| 4734 | /* Remove F10 as a menu accelerator, it does not mix well with Emacs key | 4783 | /* Remove F10 as a menu accelerator, it does not mix well with Emacs key |
| 4735 | bindings. It doesn't seem to be any way to remove properties, | 4784 | bindings. It doesn't seem to be any way to remove properties, |
| 4736 | so we set it to VoidSymbol which in X means "no key". */ | 4785 | so we set it to VoidSymbol which in X means "no key". */ |
| 4737 | gtk_settings_set_string_property (gtk_settings_get_default (), | 4786 | gtk_settings_set_string_property (settings, |
| 4738 | "gtk-menu-bar-accel", | 4787 | "gtk-menu-bar-accel", |
| 4739 | "VoidSymbol", | 4788 | "VoidSymbol", |
| 4740 | EMACS_CLASS); | 4789 | EMACS_CLASS); |
| 4741 | 4790 | ||
| 4742 | /* Make GTK text input widgets use Emacs style keybindings. This is | 4791 | /* Make GTK text input widgets use Emacs style keybindings. This is |
| 4743 | Emacs after all. */ | 4792 | Emacs after all. */ |
| 4744 | gtk_settings_set_string_property (gtk_settings_get_default (), | 4793 | gtk_settings_set_string_property (settings, |
| 4745 | "gtk-key-theme-name", | 4794 | "gtk-key-theme-name", |
| 4746 | "Emacs", | 4795 | "Emacs", |
| 4747 | EMACS_CLASS); | 4796 | EMACS_CLASS); |