aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Djärv2012-07-05 17:44:53 +0200
committerJan Djärv2012-07-05 17:44:53 +0200
commit383b7c95b8de833f11de2da6abbbc69120c156cd (patch)
treeafbd3d27e08a2ea2ec95d4e2cd5a4959ddfca2e5 /src
parentea2ac79792ff8720f16ae72118e42e81c46d4653 (diff)
downloademacs-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/ChangeLog17
-rw-r--r--src/gtkutil.c87
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 @@
12012-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
12012-07-05 Eli Zaretskii <eliz@gnu.org> 182012-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
4306static int 4334static int
4335is_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
4352static int
4307xg_tool_item_stale_p (GtkWidget *wbutton, const char *stock_name, 4353xg_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
4715xg_initialize (void) 4761xg_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);