aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan D2010-06-28 12:11:26 +0200
committerJan D2010-06-28 12:11:26 +0200
commite547b05103d5e7821488d2013c4daccdea1fc763 (patch)
tree991e59b1e487d5636b345ce34640f2ca18493255 /src
parent1180f752898ae71089f090f16f531157b31e5841 (diff)
downloademacs-e547b05103d5e7821488d2013c4daccdea1fc763.tar.gz
emacs-e547b05103d5e7821488d2013c4daccdea1fc763.zip
Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
* configure.in: Add --with-x-toolkit=gtk3. Remove HAVE_GTK_MULTIDISPLAY, check for gtk_file_chooser_dialog_new, and HAVE_GTK_FILE_BOTH (implied by minimum required Gtk+ 2.6). Add checks for functions introduced in Gtk+ 2.14 or newer. * xterm.h (gtk_widget_get_window, gtk_widget_get_mapped) (gtk_adjustment_get_page_size, gtk_adjustment_get_upper): New defines based on what configure finds. * xterm.c (XTflash): Use gtk_widget_get_window. (xg_scroll_callback): Use gtk_adjustment_get_upper and gtk_adjustment_get_page_size. (handle_one_xevent): Use gtk_widget_get_mapped. (x_term_init): Remove HAVE_GTK_MULTIDISPLAY and associated error messages. * xmenu.c (create_and_show_popup_menu): Call gtk_widget_get_mapped. * gtkutil.h: Replace HAVE_GTK_FILE_BOTH with HAVE_GTK_FILE_SELECTION_NEW. * gtkutil.c (xg_display_open, xg_display_close): Remove HAVE_GTK_MULTIDISPLAY, it is always defined. (xg_display_open): Return type is void. (gtk_widget_set_has_window) (gtk_dialog_get_action_area, gtk_dialog_get_content_area) (gtk_widget_get_sensitive, gtk_adjustment_set_page_size) (gtk_adjustment_set_page_increment) (gtk_adjustment_get_step_increment): #define these if not found by configure. (remove_submenu): New define based on Gtk+ version. (xg_set_cursor, xg_frame_resized, xg_event_is_for_scrollbar): Use gtk_widget_get_window. (xg_frame_resized, xg_update_frame_menubar): Use gtk_widget_get_mapped. (xg_create_frame_widgets): Use gtk_widget_set_has_window. (create_dialog): Use gtk_dialog_get_action_area and gtk_dialog_get_content_area. (xg_uses_old_file_dialog, xg_get_file_name): Remove HAVE_GTK_FILE_BOTH and HAVE_GTK_FILE_CHOOSER_DIALOG_NEW. File chooser is always available, so checking for HAVE_GTK_FILE_SELECTION_NEW is enough. (xg_update_menubar, xg_update_submenu, xg_show_toolbar_item): Use g_object_ref and g_object_unref. (xg_update_menu_item, xg_tool_bar_menu_proxy): Use gtk_widget_get_sensitive. (xg_update_submenu): Use remove_submenu. (xg_update_scrollbar_pos): Don't use GtkFixedChild, use child properties instead to get old x and y position. (xg_set_toolkit_scroll_bar_thumb): Use gtk_adjustment_get_page_size, gtk_adjustment_get_step_increment, gtk_adjustment_set_page_size, gtk_adjustment_set_step_increment and gtk_adjustment_set_page_increment. (xg_get_tool_bar_widgets): New function. (xg_tool_bar_menu_proxy, xg_show_toolbar_item) (update_frame_tool_bar): Call xg_get_tool_bar_widgets. (toolbar_set_orientation): New #define based on if configure finds gtk_orientable_set_orientation. (xg_create_tool_bar): Call toolbar_set_orientation. (xg_make_tool_item, xg_show_toolbar_item): Call gtk_box_pack_start instead of gtk_box_pack_start_defaults.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog56
-rw-r--r--src/config.in29
-rw-r--r--src/gtkutil.c227
-rw-r--r--src/gtkutil.h5
-rw-r--r--src/xmenu.c2
-rw-r--r--src/xterm.c27
-rw-r--r--src/xterm.h16
7 files changed, 205 insertions, 157 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 18e12b5e022..0c8d584f139 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,59 @@
12010-06-28 Jan Djärv <jan.h.d@swipnet.se>
2
3 * xterm.h (gtk_widget_get_window, gtk_widget_get_mapped)
4 (gtk_adjustment_get_page_size, gtk_adjustment_get_upper): New
5 defines based on what configure finds.
6
7 * xterm.c (XTflash): Use gtk_widget_get_window.
8 (xg_scroll_callback): Use gtk_adjustment_get_upper and
9 gtk_adjustment_get_page_size.
10 (handle_one_xevent): Use gtk_widget_get_mapped.
11 (x_term_init): Remove HAVE_GTK_MULTIDISPLAY and associated error
12 messages.
13
14 * xmenu.c (create_and_show_popup_menu): Call gtk_widget_get_mapped.
15
16 * gtkutil.h: Replace HAVE_GTK_FILE_BOTH with
17 HAVE_GTK_FILE_SELECTION_NEW.
18
19 * gtkutil.c (xg_display_open, xg_display_close): Remove
20 HAVE_GTK_MULTIDISPLAY, it is always defined.
21 (xg_display_open): Return type is void.
22 (gtk_widget_set_has_window)
23 (gtk_dialog_get_action_area, gtk_dialog_get_content_area)
24 (gtk_widget_get_sensitive, gtk_adjustment_set_page_size)
25 (gtk_adjustment_set_page_increment)
26 (gtk_adjustment_get_step_increment): #define these if not found
27 by configure.
28 (remove_submenu): New define based on Gtk+ version.
29 (xg_set_cursor, xg_frame_resized, xg_event_is_for_scrollbar): Use
30 gtk_widget_get_window.
31 (xg_frame_resized, xg_update_frame_menubar): Use gtk_widget_get_mapped.
32 (xg_create_frame_widgets): Use gtk_widget_set_has_window.
33 (create_dialog): Use gtk_dialog_get_action_area and
34 gtk_dialog_get_content_area.
35 (xg_uses_old_file_dialog, xg_get_file_name): Remove HAVE_GTK_FILE_BOTH
36 and HAVE_GTK_FILE_CHOOSER_DIALOG_NEW. File chooser is always
37 available, so checking for HAVE_GTK_FILE_SELECTION_NEW is enough.
38 (xg_update_menubar, xg_update_submenu, xg_show_toolbar_item): Use
39 g_object_ref and g_object_unref.
40 (xg_update_menu_item, xg_tool_bar_menu_proxy): Use
41 gtk_widget_get_sensitive.
42 (xg_update_submenu): Use remove_submenu.
43 (xg_update_scrollbar_pos): Don't use GtkFixedChild, use child
44 properties instead to get old x and y position.
45 (xg_set_toolkit_scroll_bar_thumb): Use gtk_adjustment_get_page_size,
46 gtk_adjustment_get_step_increment, gtk_adjustment_set_page_size,
47 gtk_adjustment_set_step_increment and gtk_adjustment_set_page_increment.
48 (xg_get_tool_bar_widgets): New function.
49 (xg_tool_bar_menu_proxy, xg_show_toolbar_item)
50 (update_frame_tool_bar): Call xg_get_tool_bar_widgets.
51 (toolbar_set_orientation): New #define based on if configure
52 finds gtk_orientable_set_orientation.
53 (xg_create_tool_bar): Call toolbar_set_orientation.
54 (xg_make_tool_item, xg_show_toolbar_item): Call gtk_box_pack_start
55 instead of gtk_box_pack_start_defaults.
56
12010-06-28 Chong Yidong <cyd@stupidchicken.com> 572010-06-28 Chong Yidong <cyd@stupidchicken.com>
2 58
3 * cmds.c (Fdelete_backward_char): Move into Lisp. 59 * cmds.c (Fdelete_backward_char): Move into Lisp.
diff --git a/src/config.in b/src/config.in
index 3fa3c30ce0e..ef4caf58b8c 100644
--- a/src/config.in
+++ b/src/config.in
@@ -195,9 +195,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
195/* Define to 1 if using GConf. */ 195/* Define to 1 if using GConf. */
196#undef HAVE_GCONF 196#undef HAVE_GCONF
197 197
198/* Define to 1 if you have the `gdk_display_open' function. */
199#undef HAVE_GDK_DISPLAY_OPEN
200
201/* Define to 1 if you have the `getaddrinfo' function. */ 198/* Define to 1 if you have the `getaddrinfo' function. */
202#undef HAVE_GETADDRINFO 199#undef HAVE_GETADDRINFO
203 200
@@ -264,14 +261,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
264/* Define to 1 if you have the `grantpt' function. */ 261/* Define to 1 if you have the `grantpt' function. */
265#undef HAVE_GRANTPT 262#undef HAVE_GRANTPT
266 263
264/* Define to 1 if you have the `gtk_adjustment_get_page_size' function. */
265#undef HAVE_GTK_ADJUSTMENT_GET_PAGE_SIZE
266
267/* Define to 1 if you have GTK and pthread (-lpthread). */ 267/* Define to 1 if you have GTK and pthread (-lpthread). */
268#undef HAVE_GTK_AND_PTHREAD 268#undef HAVE_GTK_AND_PTHREAD
269 269
270/* Define to 1 if GTK has both file selection and chooser dialog. */ 270/* Define to 1 if you have the `gtk_dialog_get_action_area' function. */
271#undef HAVE_GTK_FILE_BOTH 271#undef HAVE_GTK_DIALOG_GET_ACTION_AREA
272
273/* Define to 1 if you have the `gtk_file_chooser_dialog_new' function. */
274#undef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
275 272
276/* Define to 1 if you have the `gtk_file_selection_new' function. */ 273/* Define to 1 if you have the `gtk_file_selection_new' function. */
277#undef HAVE_GTK_FILE_SELECTION_NEW 274#undef HAVE_GTK_FILE_SELECTION_NEW
@@ -279,8 +276,20 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
279/* Define to 1 if you have the `gtk_main' function. */ 276/* Define to 1 if you have the `gtk_main' function. */
280#undef HAVE_GTK_MAIN 277#undef HAVE_GTK_MAIN
281 278
282/* Define to 1 if GTK can handle more than one display. */ 279/* Define to 1 if you have the `gtk_orientable_set_orientation' function. */
283#undef HAVE_GTK_MULTIDISPLAY 280#undef HAVE_GTK_ORIENTABLE_SET_ORIENTATION
281
282/* Define to 1 if you have the `gtk_widget_get_mapped' function. */
283#undef HAVE_GTK_WIDGET_GET_MAPPED
284
285/* Define to 1 if you have the `gtk_widget_get_sensitive' function. */
286#undef HAVE_GTK_WIDGET_GET_SENSITIVE
287
288/* Define to 1 if you have the `gtk_widget_get_window' function. */
289#undef HAVE_GTK_WIDGET_GET_WINDOW
290
291/* Define to 1 if you have the `gtk_widget_set_has_window' function. */
292#undef HAVE_GTK_WIDGET_SET_HAS_WINDOW
284 293
285/* Define to 1 if netdb.h declares h_errno. */ 294/* Define to 1 if netdb.h declares h_errno. */
286#undef HAVE_H_ERRNO 295#undef HAVE_H_ERRNO
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 5774332c676..6a75aa473e3 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -47,13 +47,34 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
47/* Avoid "differ in sign" warnings */ 47/* Avoid "differ in sign" warnings */
48#define SSDATA(x) ((char *) SDATA (x)) 48#define SSDATA(x) ((char *) SDATA (x))
49 49
50#ifndef HAVE_GTK_WIDGET_SET_HAS_WINDOW
51#define gtk_widget_set_has_window(w, b) \
52 (gtk_fixed_set_has_window (GTK_FIXED (w), b))
53#endif
54#ifndef HAVE_GTK_DIALOG_GET_ACTION_AREA
55#define gtk_dialog_get_action_area(w) ((w)->action_area)
56#define gtk_dialog_get_content_area(w) ((w)->vbox)
57#endif
58#ifndef HAVE_GTK_WIDGET_GET_SENSITIVE
59#define gtk_widget_get_sensitive(w) (GTK_WIDGET_SENSITIVE (w))
60#endif
61#ifndef HAVE_GTK_ADJUSTMENT_GET_PAGE_SIZE
62#define gtk_adjustment_set_page_size(w, s) ((w)->page_size = (s))
63#define gtk_adjustment_set_page_increment(w, s) ((w)->page_increment = (s))
64#define gtk_adjustment_get_step_increment(w) ((w)->step_increment)
65#define gtk_adjustment_set_step_increment(w, s) ((w)->step_increment = (s))
66#endif
67#if GTK_MAJOR_VERSION > 2 || GTK_MINOR_VERSION > 11
68#define remove_submenu(w) gtk_menu_item_set_submenu ((w), NULL)
69#else
70#define remove_submenu(w) gtk_menu_item_remove_submenu ((w))
71#endif
72
50 73
51/*********************************************************************** 74/***********************************************************************
52 Display handling functions 75 Display handling functions
53 ***********************************************************************/ 76 ***********************************************************************/
54 77
55#ifdef HAVE_GTK_MULTIDISPLAY
56
57/* Keep track of the default display, or NULL if there is none. Emacs 78/* Keep track of the default display, or NULL if there is none. Emacs
58 may close all its displays. */ 79 may close all its displays. */
59 80
@@ -81,20 +102,6 @@ xg_set_screen (w, f)
81} 102}
82 103
83 104
84#else /* not HAVE_GTK_MULTIDISPLAY */
85
86/* Make some defines so we can use the GTK 2.2 functions when
87 compiling with GTK 2.0. */
88
89#define xg_set_screen(w, f)
90#define gdk_xid_table_lookup_for_display(dpy, w) gdk_xid_table_lookup (w)
91#define gdk_pixmap_foreign_new_for_display(dpy, p) gdk_pixmap_foreign_new (p)
92#define gdk_cursor_new_for_display(dpy, c) gdk_cursor_new (c)
93#define gdk_x11_lookup_xdisplay(dpy) 0
94#define GdkDisplay void
95
96#endif /* not HAVE_GTK_MULTIDISPLAY */
97
98/* Open a display named by DISPLAY_NAME. The display is returned in *DPY. 105/* Open a display named by DISPLAY_NAME. The display is returned in *DPY.
99 *DPY is set to NULL if the display can't be opened. 106 *DPY is set to NULL if the display can't be opened.
100 107
@@ -102,12 +109,11 @@ xg_set_screen (w, f)
102 be opened, and less than zero if the GTK version doesn't support 109 be opened, and less than zero if the GTK version doesn't support
103 multipe displays. */ 110 multipe displays. */
104 111
105int 112void
106xg_display_open (display_name, dpy) 113xg_display_open (display_name, dpy)
107 char *display_name; 114 char *display_name;
108 Display **dpy; 115 Display **dpy;
109{ 116{
110#ifdef HAVE_GTK_MULTIDISPLAY
111 GdkDisplay *gdpy; 117 GdkDisplay *gdpy;
112 118
113 gdpy = gdk_display_open (display_name); 119 gdpy = gdk_display_open (display_name);
@@ -119,12 +125,6 @@ xg_display_open (display_name, dpy)
119 } 125 }
120 126
121 *dpy = gdpy ? GDK_DISPLAY_XDISPLAY (gdpy) : NULL; 127 *dpy = gdpy ? GDK_DISPLAY_XDISPLAY (gdpy) : NULL;
122 return gdpy != NULL;
123
124#else /* not HAVE_GTK_MULTIDISPLAY */
125
126 return -1;
127#endif /* not HAVE_GTK_MULTIDISPLAY */
128} 128}
129 129
130 130
@@ -133,7 +133,6 @@ xg_display_open (display_name, dpy)
133void 133void
134xg_display_close (Display *dpy) 134xg_display_close (Display *dpy)
135{ 135{
136#ifdef HAVE_GTK_MULTIDISPLAY
137 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpy); 136 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpy);
138 137
139 /* If this is the default display, try to change it before closing. 138 /* If this is the default display, try to change it before closing.
@@ -165,7 +164,6 @@ xg_display_close (Display *dpy)
165 /* This seems to be fixed in GTK 2.10. */ 164 /* This seems to be fixed in GTK 2.10. */
166 gdk_display_close (gdpy); 165 gdk_display_close (gdpy);
167#endif 166#endif
168#endif /* HAVE_GTK_MULTIDISPLAY */
169} 167}
170 168
171 169
@@ -397,9 +395,10 @@ xg_set_cursor (w, cursor)
397 GtkWidget *w; 395 GtkWidget *w;
398 GdkCursor *cursor; 396 GdkCursor *cursor;
399{ 397{
400 GList *children = gdk_window_peek_children (w->window); 398 GdkWindow *window = gtk_widget_get_window(w);
399 GList *children = gdk_window_peek_children (window);
401 400
402 gdk_window_set_cursor (w->window, cursor); 401 gdk_window_set_cursor (window, cursor);
403 402
404 /* The scroll bar widget has more than one GDK window (had to look at 403 /* The scroll bar widget has more than one GDK window (had to look at
405 the source to figure this out), and there is no way to set cursor 404 the source to figure this out), and there is no way to set cursor
@@ -606,8 +605,9 @@ xg_frame_resized (f, pixelwidth, pixelheight)
606 605
607 if (pixelwidth == -1 && pixelheight == -1) 606 if (pixelwidth == -1 && pixelheight == -1)
608 { 607 {
609 if (FRAME_GTK_WIDGET (f) && GTK_WIDGET_MAPPED (FRAME_GTK_WIDGET (f))) 608 if (FRAME_GTK_WIDGET (f) && gtk_widget_get_mapped (FRAME_GTK_WIDGET (f)))
610 gdk_window_get_geometry (FRAME_GTK_WIDGET (f)->window, 0, 0, 609 gdk_window_get_geometry (gtk_widget_get_window (FRAME_GTK_WIDGET (f)),
610 0, 0,
611 &pixelwidth, &pixelheight, 0); 611 &pixelwidth, &pixelheight, 0);
612 else return; 612 else return;
613 } 613 }
@@ -802,7 +802,7 @@ xg_create_frame_widgets (f)
802 FRAME_GTK_WIDGET (f) = wfixed; 802 FRAME_GTK_WIDGET (f) = wfixed;
803 f->output_data.x->vbox_widget = wvbox; 803 f->output_data.x->vbox_widget = wvbox;
804 804
805 gtk_fixed_set_has_window (GTK_FIXED (wfixed), TRUE); 805 gtk_widget_set_has_window (wfixed, TRUE);
806 806
807 gtk_container_add (GTK_CONTAINER (wtop), wvbox); 807 gtk_container_add (GTK_CONTAINER (wtop), wvbox);
808 gtk_box_pack_end (GTK_BOX (wvbox), wfixed, TRUE, TRUE, 0); 808 gtk_box_pack_end (GTK_BOX (wvbox), wfixed, TRUE, TRUE, 0);
@@ -1093,8 +1093,9 @@ create_dialog (wv, select_cb, deactivate_cb)
1093 int button_nr = 0; 1093 int button_nr = 0;
1094 int button_spacing = 10; 1094 int button_spacing = 10;
1095 GtkWidget *wdialog = gtk_dialog_new (); 1095 GtkWidget *wdialog = gtk_dialog_new ();
1096 GtkDialog *wd = GTK_DIALOG (wdialog);
1097 GtkBox *cur_box = GTK_BOX (gtk_dialog_get_action_area (wd));
1096 widget_value *item; 1098 widget_value *item;
1097 GtkBox *cur_box;
1098 GtkWidget *wvbox; 1099 GtkWidget *wvbox;
1099 GtkWidget *whbox_up; 1100 GtkWidget *whbox_up;
1100 GtkWidget *whbox_down; 1101 GtkWidget *whbox_down;
@@ -1109,7 +1110,6 @@ create_dialog (wv, select_cb, deactivate_cb)
1109 gtk_window_set_title (GTK_WINDOW (wdialog), title); 1110 gtk_window_set_title (GTK_WINDOW (wdialog), title);
1110 gtk_widget_set_name (wdialog, "emacs-dialog"); 1111 gtk_widget_set_name (wdialog, "emacs-dialog");
1111 1112
1112 cur_box = GTK_BOX (GTK_DIALOG (wdialog)->action_area);
1113 1113
1114 if (make_two_rows) 1114 if (make_two_rows)
1115 { 1115 {
@@ -1141,21 +1141,18 @@ create_dialog (wv, select_cb, deactivate_cb)
1141 1141
1142 if (item->name && strcmp (item->name, "message") == 0) 1142 if (item->name && strcmp (item->name, "message") == 0)
1143 { 1143 {
1144 GtkBox *wvbox = GTK_BOX (gtk_dialog_get_content_area (wd));
1144 /* This is the text part of the dialog. */ 1145 /* This is the text part of the dialog. */
1145 w = gtk_label_new (utf8_label); 1146 w = gtk_label_new (utf8_label);
1146 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (wdialog)->vbox), 1147 gtk_box_pack_start (wvbox, gtk_label_new (""), FALSE, FALSE, 0);
1147 gtk_label_new (""), 1148 gtk_box_pack_start (wvbox, w, TRUE, TRUE, 0);
1148 FALSE, FALSE, 0);
1149 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (wdialog)->vbox), w,
1150 TRUE, TRUE, 0);
1151 gtk_misc_set_alignment (GTK_MISC (w), 0.1, 0.5); 1149 gtk_misc_set_alignment (GTK_MISC (w), 0.1, 0.5);
1152 1150
1153 /* Try to make dialog look better. Must realize first so 1151 /* Try to make dialog look better. Must realize first so
1154 the widget can calculate the size it needs. */ 1152 the widget can calculate the size it needs. */
1155 gtk_widget_realize (w); 1153 gtk_widget_realize (w);
1156 gtk_widget_size_request (w, &req); 1154 gtk_widget_size_request (w, &req);
1157 gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (wdialog)->vbox), 1155 gtk_box_set_spacing (wvbox, req.height);
1158 req.height);
1159 if (item->value && strlen (item->value) > 0) 1156 if (item->value && strlen (item->value) > 0)
1160 button_spacing = 2*req.width/strlen (item->value); 1157 button_spacing = 2*req.width/strlen (item->value);
1161 } 1158 }
@@ -1313,25 +1310,17 @@ xg_dialog_run (f, w)
1313int 1310int
1314xg_uses_old_file_dialog () 1311xg_uses_old_file_dialog ()
1315{ 1312{
1316#ifdef HAVE_GTK_FILE_BOTH 1313#ifdef HAVE_GTK_FILE_SELECTION_NEW
1317 extern int x_gtk_use_old_file_dialog; 1314 extern int x_gtk_use_old_file_dialog;
1318 return x_gtk_use_old_file_dialog; 1315 return x_gtk_use_old_file_dialog;
1319#else /* ! HAVE_GTK_FILE_BOTH */
1320
1321#ifdef HAVE_GTK_FILE_SELECTION_NEW
1322 return 1;
1323#else 1316#else
1324 return 0; 1317 return 0;
1325#endif 1318#endif
1326
1327#endif /* ! HAVE_GTK_FILE_BOTH */
1328} 1319}
1329 1320
1330 1321
1331typedef char * (*xg_get_file_func) P_ ((GtkWidget *)); 1322typedef char * (*xg_get_file_func) P_ ((GtkWidget *));
1332 1323
1333#ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
1334
1335/* Return the selected file for file chooser dialog W. 1324/* Return the selected file for file chooser dialog W.
1336 The returned string must be free:d. */ 1325 The returned string must be free:d. */
1337 1326
@@ -1507,7 +1496,6 @@ xg_get_file_with_chooser (f, prompt, default_filename,
1507 *func = xg_get_file_name_from_chooser; 1496 *func = xg_get_file_name_from_chooser;
1508 return filewin; 1497 return filewin;
1509} 1498}
1510#endif /* HAVE_GTK_FILE_CHOOSER_DIALOG_NEW */
1511 1499
1512#ifdef HAVE_GTK_FILE_SELECTION_NEW 1500#ifdef HAVE_GTK_FILE_SELECTION_NEW
1513 1501
@@ -1595,7 +1583,7 @@ xg_get_file_name (f, prompt, default_filename, mustmatch_p, only_dir_p)
1595 sigblock (sigmask (__SIGRTMIN)); 1583 sigblock (sigmask (__SIGRTMIN));
1596#endif /* HAVE_GTK_AND_PTHREAD */ 1584#endif /* HAVE_GTK_AND_PTHREAD */
1597 1585
1598#ifdef HAVE_GTK_FILE_BOTH 1586#ifdef HAVE_GTK_FILE_SELECTION_NEW
1599 1587
1600 if (xg_uses_old_file_dialog ()) 1588 if (xg_uses_old_file_dialog ())
1601 w = xg_get_file_with_selection (f, prompt, default_filename, 1589 w = xg_get_file_with_selection (f, prompt, default_filename,
@@ -1604,18 +1592,10 @@ xg_get_file_name (f, prompt, default_filename, mustmatch_p, only_dir_p)
1604 w = xg_get_file_with_chooser (f, prompt, default_filename, 1592 w = xg_get_file_with_chooser (f, prompt, default_filename,
1605 mustmatch_p, only_dir_p, &func); 1593 mustmatch_p, only_dir_p, &func);
1606 1594
1607#else /* not HAVE_GTK_FILE_BOTH */ 1595#else /* not HAVE_GTK_FILE_SELECTION_NEW */
1608
1609#ifdef HAVE_GTK_FILE_SELECTION_NEW
1610 w = xg_get_file_with_selection (f, prompt, default_filename,
1611 mustmatch_p, only_dir_p, &func);
1612#endif
1613#ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
1614 w = xg_get_file_with_chooser (f, prompt, default_filename, 1596 w = xg_get_file_with_chooser (f, prompt, default_filename,
1615 mustmatch_p, only_dir_p, &func); 1597 mustmatch_p, only_dir_p, &func);
1616#endif 1598#endif /* not HAVE_GTK_FILE_SELECTION_NEW */
1617
1618#endif /* HAVE_GTK_FILE_BOTH */
1619 1599
1620 gtk_widget_set_name (w, "emacs-filedialog"); 1600 gtk_widget_set_name (w, "emacs-filedialog");
1621 1601
@@ -2473,7 +2453,7 @@ xg_update_menubar (menubar, f, list, iter, pos, val,
2473 New: A C 2453 New: A C
2474 Remove B. */ 2454 Remove B. */
2475 2455
2476 gtk_widget_ref (GTK_WIDGET (witem)); 2456 g_object_ref (G_OBJECT (witem));
2477 gtk_container_remove (GTK_CONTAINER (menubar), GTK_WIDGET (witem)); 2457 gtk_container_remove (GTK_CONTAINER (menubar), GTK_WIDGET (witem));
2478 gtk_widget_destroy (GTK_WIDGET (witem)); 2458 gtk_widget_destroy (GTK_WIDGET (witem));
2479 2459
@@ -2555,11 +2535,11 @@ xg_update_menubar (menubar, f, list, iter, pos, val,
2555 New: A C B 2535 New: A C B
2556 Move C before B */ 2536 Move C before B */
2557 2537
2558 gtk_widget_ref (GTK_WIDGET (witem2)); 2538 g_object_ref (G_OBJECT (witem2));
2559 gtk_container_remove (GTK_CONTAINER (menubar), GTK_WIDGET (witem2)); 2539 gtk_container_remove (GTK_CONTAINER (menubar), GTK_WIDGET (witem2));
2560 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), 2540 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar),
2561 GTK_WIDGET (witem2), pos); 2541 GTK_WIDGET (witem2), pos);
2562 gtk_widget_unref (GTK_WIDGET (witem2)); 2542 g_object_unref (G_OBJECT (witem2));
2563 2543
2564 g_list_free (*list); 2544 g_list_free (*list);
2565 *list = iter = gtk_container_get_children (GTK_CONTAINER (menubar)); 2545 *list = iter = gtk_container_get_children (GTK_CONTAINER (menubar));
@@ -2613,9 +2593,10 @@ xg_update_menu_item (val, w, select_cb, highlight_cb, cl_data)
2613 if (! utf8_key) 2593 if (! utf8_key)
2614 { 2594 {
2615 /* Remove the key and keep just the label. */ 2595 /* Remove the key and keep just the label. */
2616 gtk_widget_ref (GTK_WIDGET (wlbl)); 2596 g_object_ref (G_OBJECT (wlbl));
2617 gtk_container_remove (GTK_CONTAINER (w), wchild); 2597 gtk_container_remove (GTK_CONTAINER (w), wchild);
2618 gtk_container_add (GTK_CONTAINER (w), GTK_WIDGET (wlbl)); 2598 gtk_container_add (GTK_CONTAINER (w), GTK_WIDGET (wlbl));
2599 g_object_unref (G_OBJECT (wlbl));
2619 wkey = 0; 2600 wkey = 0;
2620 } 2601 }
2621 2602
@@ -2652,9 +2633,9 @@ xg_update_menu_item (val, w, select_cb, highlight_cb, cl_data)
2652 if (utf8_key && utf8_key != val->key) g_free (utf8_key); 2633 if (utf8_key && utf8_key != val->key) g_free (utf8_key);
2653 if (utf8_label && utf8_label != val->name) g_free (utf8_label); 2634 if (utf8_label && utf8_label != val->name) g_free (utf8_label);
2654 2635
2655 if (! val->enabled && GTK_WIDGET_SENSITIVE (w)) 2636 if (! val->enabled && gtk_widget_get_sensitive (w))
2656 gtk_widget_set_sensitive (w, FALSE); 2637 gtk_widget_set_sensitive (w, FALSE);
2657 else if (val->enabled && ! GTK_WIDGET_SENSITIVE (w)) 2638 else if (val->enabled && ! gtk_widget_get_sensitive (w))
2658 gtk_widget_set_sensitive (w, TRUE); 2639 gtk_widget_set_sensitive (w, TRUE);
2659 2640
2660 cb_data = (xg_menu_item_cb_data*) g_object_get_data (G_OBJECT (w), 2641 cb_data = (xg_menu_item_cb_data*) g_object_get_data (G_OBJECT (w),
@@ -2793,8 +2774,8 @@ xg_update_submenu (submenu, f, val,
2793 if (sub && ! cur->contents) 2774 if (sub && ! cur->contents)
2794 { 2775 {
2795 /* Not a submenu anymore. */ 2776 /* Not a submenu anymore. */
2796 gtk_widget_ref (sub); 2777 g_object_ref (G_OBJECT (sub));
2797 gtk_menu_item_remove_submenu (witem); 2778 remove_submenu (witem);
2798 gtk_widget_destroy (sub); 2779 gtk_widget_destroy (sub);
2799 } 2780 }
2800 else if (cur->contents) 2781 else if (cur->contents)
@@ -2940,7 +2921,7 @@ xg_update_frame_menubar (f)
2940 struct x_output *x = f->output_data.x; 2921 struct x_output *x = f->output_data.x;
2941 GtkRequisition req; 2922 GtkRequisition req;
2942 2923
2943 if (!x->menubar_widget || GTK_WIDGET_MAPPED (x->menubar_widget)) 2924 if (!x->menubar_widget || gtk_widget_get_mapped (x->menubar_widget))
2944 return 0; 2925 return 0;
2945 2926
2946 if (x->menubar_widget && gtk_widget_get_parent (x->menubar_widget)) 2927 if (x->menubar_widget && gtk_widget_get_parent (x->menubar_widget))
@@ -3212,24 +3193,16 @@ xg_update_scrollbar_pos (f, scrollbar_id, top, left, width, height)
3212 { 3193 {
3213 GtkWidget *wfixed = f->output_data.x->edit_widget; 3194 GtkWidget *wfixed = f->output_data.x->edit_widget;
3214 GtkWidget *wparent = gtk_widget_get_parent (wscroll); 3195 GtkWidget *wparent = gtk_widget_get_parent (wscroll);
3215 GtkFixed *wf = GTK_FIXED (wfixed);
3216 gint msl; 3196 gint msl;
3217 3197
3218 /* Clear out old position. */ 3198 /* Clear out old position. */
3219 GList *iter;
3220 int oldx = -1, oldy = -1, oldw, oldh; 3199 int oldx = -1, oldy = -1, oldw, oldh;
3221 for (iter = wf->children; iter; iter = iter->next) 3200 if (gtk_widget_get_parent (wparent) == wfixed)
3222 if (((GtkFixedChild *)iter->data)->widget == wparent) 3201 {
3223 { 3202 gtk_container_child_get (GTK_CONTAINER (wfixed), wparent,
3224 GtkFixedChild *ch = (GtkFixedChild *)iter->data; 3203 "x", &oldx, "y", &oldy, NULL);
3225 if (ch->x != left || ch->y != top) 3204 gtk_widget_get_size_request (wscroll, &oldw, &oldh);
3226 { 3205 }
3227 oldx = ch->x;
3228 oldy = ch->y;
3229 gtk_widget_get_size_request (wscroll, &oldw, &oldh);
3230 }
3231 break;
3232 }
3233 3206
3234 /* Move and resize to new values. */ 3207 /* Move and resize to new values. */
3235 gtk_fixed_move (GTK_FIXED (wfixed), wparent, left, top); 3208 gtk_fixed_move (GTK_FIXED (wfixed), wparent, left, top);
@@ -3318,13 +3291,13 @@ xg_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
3318 /* Assume all lines are of equal size. */ 3291 /* Assume all lines are of equal size. */
3319 new_step = size / max (1, FRAME_LINES (f)); 3292 new_step = size / max (1, FRAME_LINES (f));
3320 3293
3321 if ((int) adj->page_size != size 3294 if ((int) gtk_adjustment_get_page_size (adj) != size
3322 || (int) adj->step_increment != new_step) 3295 || (int) gtk_adjustment_get_step_increment (adj) != new_step)
3323 { 3296 {
3324 adj->page_size = size; 3297 gtk_adjustment_set_page_size (adj, size);
3325 adj->step_increment = new_step; 3298 gtk_adjustment_set_step_increment (adj, new_step);
3326 /* Assume a page increment is about 95% of the page size */ 3299 /* Assume a page increment is about 95% of the page size */
3327 adj->page_increment = (int) (0.95*adj->page_size); 3300 gtk_adjustment_set_page_increment (adj,(int) (0.95*size));
3328 changed = 1; 3301 changed = 1;
3329 } 3302 }
3330 3303
@@ -3367,7 +3340,7 @@ xg_event_is_for_scrollbar (f, event)
3367 /* Check if press occurred outside the edit widget. */ 3340 /* Check if press occurred outside the edit widget. */
3368 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f)); 3341 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
3369 retval = gdk_display_get_window_at_pointer (gdpy, NULL, NULL) 3342 retval = gdk_display_get_window_at_pointer (gdpy, NULL, NULL)
3370 != f->output_data.x->edit_widget->window; 3343 != gtk_widget_get_window (f->output_data.x->edit_widget);
3371 } 3344 }
3372 else if (f 3345 else if (f
3373 && ((event->type == ButtonRelease && event->xbutton.button < 4) 3346 && ((event->type == ButtonRelease && event->xbutton.button < 4)
@@ -3512,6 +3485,17 @@ xg_tool_bar_proxy_help_callback (w, event, client_data)
3512 return xg_tool_bar_help_callback (wbutton, event, client_data); 3485 return xg_tool_bar_help_callback (wbutton, event, client_data);
3513} 3486}
3514 3487
3488static GtkWidget *
3489xg_get_tool_bar_widgets (GtkWidget *vb, GtkWidget **wimage)
3490{
3491 GList *clist = gtk_container_get_children (GTK_CONTAINER (vb));
3492 GtkWidget *c1 = (GtkWidget *) clist->data;
3493 GtkWidget *c2 = (GtkWidget *) clist->next->data;
3494 *wimage = GTK_IS_IMAGE (c1) ? c1 : c2;
3495 g_list_free (clist);
3496 return GTK_IS_LABEL (c1) ? c1 : c2;
3497}
3498
3515 3499
3516/* This callback is called when a tool item should create a proxy item, 3500/* This callback is called when a tool item should create a proxy item,
3517 such as for the overflow menu. Also called when the tool bar is detached. 3501 such as for the overflow menu. Also called when the tool bar is detached.
@@ -3525,18 +3509,15 @@ xg_tool_bar_menu_proxy (toolitem, user_data)
3525{ 3509{
3526 GtkWidget *weventbox = gtk_bin_get_child (GTK_BIN (toolitem)); 3510 GtkWidget *weventbox = gtk_bin_get_child (GTK_BIN (toolitem));
3527 GtkButton *wbutton = GTK_BUTTON (gtk_bin_get_child (GTK_BIN (weventbox))); 3511 GtkButton *wbutton = GTK_BUTTON (gtk_bin_get_child (GTK_BIN (weventbox)));
3528 GtkBox *vb = GTK_BOX (gtk_bin_get_child (GTK_BIN (wbutton))); 3512 GtkWidget *vb = gtk_bin_get_child (GTK_BIN (wbutton));
3529 GtkBoxChild *c1 = (GtkBoxChild *) vb->children->data; 3513 GtkWidget *c1;
3530 GtkBoxChild *c2 = (GtkBoxChild *) vb->children->next->data; 3514 GtkLabel *wlbl = GTK_LABEL (xg_get_tool_bar_widgets (vb, &c1));
3531 GtkImage *wimage = GTK_IS_IMAGE (c1->widget) 3515 GtkImage *wimage = GTK_IMAGE (c1);
3532 ? GTK_IMAGE (c1->widget) : GTK_IMAGE (c2->widget);
3533 GtkLabel *wlbl = GTK_IS_LABEL (c1->widget)
3534 ? GTK_LABEL (c1->widget) : GTK_LABEL (c2->widget);
3535 GtkWidget *wmenuitem = gtk_image_menu_item_new_with_label 3516 GtkWidget *wmenuitem = gtk_image_menu_item_new_with_label
3536 (gtk_label_get_text (wlbl)); 3517 (gtk_label_get_text (wlbl));
3537
3538 GtkWidget *wmenuimage; 3518 GtkWidget *wmenuimage;
3539 3519
3520
3540 if (gtk_button_get_use_stock (wbutton)) 3521 if (gtk_button_get_use_stock (wbutton))
3541 wmenuimage = gtk_image_new_from_stock (gtk_button_get_label (wbutton), 3522 wmenuimage = gtk_image_new_from_stock (gtk_button_get_label (wbutton),
3542 GTK_ICON_SIZE_MENU); 3523 GTK_ICON_SIZE_MENU);
@@ -3607,7 +3588,8 @@ xg_tool_bar_menu_proxy (toolitem, user_data)
3607 g_object_set_data (G_OBJECT (wmenuitem), XG_TOOL_BAR_PROXY_BUTTON, 3588 g_object_set_data (G_OBJECT (wmenuitem), XG_TOOL_BAR_PROXY_BUTTON,
3608 (gpointer) wbutton); 3589 (gpointer) wbutton);
3609 gtk_tool_item_set_proxy_menu_item (toolitem, "Emacs toolbar item", wmenuitem); 3590 gtk_tool_item_set_proxy_menu_item (toolitem, "Emacs toolbar item", wmenuitem);
3610 gtk_widget_set_sensitive (wmenuitem, GTK_WIDGET_SENSITIVE (wbutton)); 3591 gtk_widget_set_sensitive (wmenuitem,
3592 gtk_widget_get_sensitive (GTK_WIDGET (wbutton)));
3611 3593
3612 /* Use enter/leave notify to show help. We use the events 3594 /* Use enter/leave notify to show help. We use the events
3613 rather than the GtkButton specific signals "enter" and 3595 rather than the GtkButton specific signals "enter" and
@@ -3786,6 +3768,13 @@ xg_pack_tool_bar (f)
3786} 3768}
3787 3769
3788/* Create a tool bar for frame F. */ 3770/* Create a tool bar for frame F. */
3771#ifdef HAVE_GTK_ORIENTABLE_SET_ORIENTATION
3772#define toolbar_set_orientation(w, o) \
3773 gtk_orientable_set_orientation (GTK_ORIENTABLE (w), o)
3774#else
3775#define toolbar_set_orientation(w, o) \
3776 gtk_toolbar_set_orientation (GTK_TOOLBAR (w), o)
3777#endif
3789 3778
3790static void 3779static void
3791xg_create_tool_bar (f) 3780xg_create_tool_bar (f)
@@ -3799,7 +3788,7 @@ xg_create_tool_bar (f)
3799 gtk_widget_set_name (x->toolbar_widget, "emacs-toolbar"); 3788 gtk_widget_set_name (x->toolbar_widget, "emacs-toolbar");
3800 3789
3801 gtk_toolbar_set_style (GTK_TOOLBAR (x->toolbar_widget), GTK_TOOLBAR_ICONS); 3790 gtk_toolbar_set_style (GTK_TOOLBAR (x->toolbar_widget), GTK_TOOLBAR_ICONS);
3802 gtk_toolbar_set_orientation (GTK_TOOLBAR (x->toolbar_widget), 3791 toolbar_set_orientation (x->toolbar_widget,
3803 GTK_ORIENTATION_HORIZONTAL); 3792 GTK_ORIENTATION_HORIZONTAL);
3804} 3793}
3805 3794
@@ -3854,9 +3843,9 @@ xg_make_tool_item (FRAME_PTR f,
3854 GtkWidget *weventbox = gtk_event_box_new (); 3843 GtkWidget *weventbox = gtk_event_box_new ();
3855 3844
3856 if (wimage) 3845 if (wimage)
3857 gtk_box_pack_start_defaults (GTK_BOX (vb), wimage); 3846 gtk_box_pack_start (GTK_BOX (vb), wimage, TRUE, TRUE, 0);
3858 3847
3859 gtk_box_pack_start_defaults (GTK_BOX (vb), gtk_label_new (label)); 3848 gtk_box_pack_start (GTK_BOX (vb), gtk_label_new (label), TRUE, TRUE, 0);
3860 gtk_button_set_focus_on_click (GTK_BUTTON (wb), FALSE); 3849 gtk_button_set_focus_on_click (GTK_BUTTON (wb), FALSE);
3861 gtk_button_set_relief (GTK_BUTTON (wb), GTK_RELIEF_NONE); 3850 gtk_button_set_relief (GTK_BUTTON (wb), GTK_RELIEF_NONE);
3862 gtk_container_add (GTK_CONTAINER (wb), vb); 3851 gtk_container_add (GTK_CONTAINER (wb), vb);
@@ -3926,13 +3915,9 @@ xg_show_toolbar_item (GtkToolItem *ti)
3926 3915
3927 GtkWidget *weventbox = gtk_bin_get_child (GTK_BIN (ti)); 3916 GtkWidget *weventbox = gtk_bin_get_child (GTK_BIN (ti));
3928 GtkWidget *wbutton = gtk_bin_get_child (GTK_BIN (weventbox)); 3917 GtkWidget *wbutton = gtk_bin_get_child (GTK_BIN (weventbox));
3929 GtkBox *vb = GTK_BOX (gtk_bin_get_child (GTK_BIN (wbutton))); 3918 GtkWidget *vb = gtk_bin_get_child (GTK_BIN (wbutton));
3930 GtkBoxChild *c1 = (GtkBoxChild *) vb->children->data; 3919 GtkWidget *wimage;
3931 GtkBoxChild *c2 = (GtkBoxChild *) vb->children->next->data; 3920 GtkWidget *wlbl = xg_get_tool_bar_widgets (vb, &wimage);
3932 GtkWidget *wimage = GTK_IS_IMAGE (c1->widget)
3933 ? c1->widget : c2->widget;
3934 GtkWidget *wlbl = GTK_IS_LABEL (c1->widget)
3935 ? c1->widget : c2->widget;
3936 GtkWidget *new_box = NULL; 3921 GtkWidget *new_box = NULL;
3937 3922
3938 if (GTK_IS_VBOX (vb) && horiz) 3923 if (GTK_IS_VBOX (vb) && horiz)
@@ -3941,17 +3926,17 @@ xg_show_toolbar_item (GtkToolItem *ti)
3941 new_box = gtk_vbox_new (FALSE, 0); 3926 new_box = gtk_vbox_new (FALSE, 0);
3942 if (new_box) 3927 if (new_box)
3943 { 3928 {
3944 gtk_widget_ref (wimage); 3929 g_object_ref (G_OBJECT (wimage));
3945 gtk_widget_ref (wlbl); 3930 g_object_ref (G_OBJECT (wlbl));
3946 gtk_container_remove (GTK_CONTAINER (vb), wimage); 3931 gtk_container_remove (GTK_CONTAINER (vb), wimage);
3947 gtk_container_remove (GTK_CONTAINER (vb), wlbl); 3932 gtk_container_remove (GTK_CONTAINER (vb), wlbl);
3948 gtk_widget_destroy (GTK_WIDGET (vb)); 3933 gtk_widget_destroy (GTK_WIDGET (vb));
3949 gtk_box_pack_start_defaults (GTK_BOX (new_box), wimage); 3934 gtk_box_pack_start (GTK_BOX (new_box), wimage, TRUE, TRUE, 0);
3950 gtk_box_pack_start_defaults (GTK_BOX (new_box), wlbl); 3935 gtk_box_pack_start (GTK_BOX (new_box), wlbl, TRUE, TRUE, 0);
3951 gtk_container_add (GTK_CONTAINER (wbutton), new_box); 3936 gtk_container_add (GTK_CONTAINER (wbutton), new_box);
3952 gtk_widget_unref (wimage); 3937 g_object_unref (G_OBJECT (wimage));
3953 gtk_widget_unref (wlbl); 3938 g_object_unref (G_OBJECT (wlbl));
3954 vb = GTK_BOX (new_box); 3939 vb = new_box;
3955 } 3940 }
3956 3941
3957 if (show_label) gtk_widget_show (wlbl); 3942 if (show_label) gtk_widget_show (wlbl);
@@ -4167,13 +4152,9 @@ update_frame_tool_bar (f)
4167 } 4152 }
4168 else 4153 else
4169 { 4154 {
4170 GtkBox *vb = GTK_BOX (gtk_bin_get_child (GTK_BIN (wbutton))); 4155 GtkWidget *vb = gtk_bin_get_child (GTK_BIN (wbutton));
4171 GtkBoxChild *c1 = (GtkBoxChild *) vb->children->data; 4156 GtkWidget *wimage;
4172 GtkBoxChild *c2 = (GtkBoxChild *) vb->children->next->data; 4157 GtkWidget *wlbl = xg_get_tool_bar_widgets (vb, &wimage);
4173 GtkWidget *wimage = GTK_IS_IMAGE (c1->widget)
4174 ? c1->widget : c2->widget;
4175 GtkWidget *wlbl = GTK_IS_LABEL (c1->widget)
4176 ? c1->widget : c2->widget;
4177 4158
4178 Pixmap old_img = (Pixmap)g_object_get_data (G_OBJECT (wimage), 4159 Pixmap old_img = (Pixmap)g_object_get_data (G_OBJECT (wimage),
4179 XG_TOOL_BAR_IMAGE_DATA); 4160 XG_TOOL_BAR_IMAGE_DATA);
diff --git a/src/gtkutil.h b/src/gtkutil.h
index 4eba4710ea3..5b9c1df25a2 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -38,7 +38,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
38/* Key for data that menu items hold. */ 38/* Key for data that menu items hold. */
39#define XG_ITEM_DATA "emacs_menuitem" 39#define XG_ITEM_DATA "emacs_menuitem"
40 40
41
42/* Button types in menus. */ 41/* Button types in menus. */
43enum button_type 42enum button_type
44{ 43{
@@ -119,7 +118,7 @@ typedef struct _widget_value
119 struct _widget_value *free_list; 118 struct _widget_value *free_list;
120} widget_value; 119} widget_value;
121 120
122#ifdef HAVE_GTK_FILE_BOTH 121#ifdef HAVE_GTK_FILE_SELECTION_NEW
123extern int use_old_gtk_file_dialog; 122extern int use_old_gtk_file_dialog;
124#endif 123#endif
125 124
@@ -187,7 +186,7 @@ extern void xg_frame_resized P_ ((FRAME_PTR f,
187extern void xg_frame_set_char_size P_ ((FRAME_PTR f, int cols, int rows)); 186extern void xg_frame_set_char_size P_ ((FRAME_PTR f, int cols, int rows));
188extern GtkWidget * xg_win_to_widget P_ ((Display *dpy, Window wdesc)); 187extern GtkWidget * xg_win_to_widget P_ ((Display *dpy, Window wdesc));
189 188
190extern int xg_display_open P_ ((char *display_name, Display **dpy)); 189extern void xg_display_open P_ ((char *display_name, Display **dpy));
191extern void xg_display_close P_ ((Display *dpy)); 190extern void xg_display_close P_ ((Display *dpy));
192extern GdkCursor * xg_create_default_cursor P_ ((Display *dpy)); 191extern GdkCursor * xg_create_default_cursor P_ ((Display *dpy));
193 192
diff --git a/src/xmenu.c b/src/xmenu.c
index 796dd3093e8..53b6b8de48a 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -1565,7 +1565,7 @@ create_and_show_popup_menu (f, first_wv, x, y, for_click, timestamp)
1565 1565
1566 record_unwind_protect (pop_down_menu, make_save_value (menu, 0)); 1566 record_unwind_protect (pop_down_menu, make_save_value (menu, 0));
1567 1567
1568 if (GTK_WIDGET_MAPPED (menu)) 1568 if (gtk_widget_get_mapped (menu))
1569 { 1569 {
1570 /* Set this to one. popup_widget_loop increases it by one, so it becomes 1570 /* Set this to one. popup_widget_loop increases it by one, so it becomes
1571 two. show_help_echo uses this to detect popup menus. */ 1571 two. show_help_echo uses this to detect popup menus. */
diff --git a/src/xterm.c b/src/xterm.c
index 59573a5942e..e3ce7bb6538 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3017,18 +3017,16 @@ XTflash (f)
3017#ifdef USE_GTK 3017#ifdef USE_GTK
3018 /* Use Gdk routines to draw. This way, we won't draw over scroll bars 3018 /* Use Gdk routines to draw. This way, we won't draw over scroll bars
3019 when the scroll bars and the edit widget share the same X window. */ 3019 when the scroll bars and the edit widget share the same X window. */
3020 GdkWindow *window = gtk_widget_get_window (FRAME_GTK_WIDGET (f));
3020 GdkGCValues vals; 3021 GdkGCValues vals;
3021 GdkGC *gc; 3022 GdkGC *gc;
3022 vals.foreground.pixel = (FRAME_FOREGROUND_PIXEL (f) 3023 vals.foreground.pixel = (FRAME_FOREGROUND_PIXEL (f)
3023 ^ FRAME_BACKGROUND_PIXEL (f)); 3024 ^ FRAME_BACKGROUND_PIXEL (f));
3024 vals.function = GDK_XOR; 3025 vals.function = GDK_XOR;
3025 gc = gdk_gc_new_with_values (FRAME_GTK_WIDGET (f)->window, 3026 gc = gdk_gc_new_with_values (window,
3026 &vals, 3027 &vals, GDK_GC_FUNCTION | GDK_GC_FOREGROUND);
3027 GDK_GC_FUNCTION
3028 | GDK_GC_FOREGROUND);
3029#define XFillRectangle(d, win, gc, x, y, w, h) \ 3028#define XFillRectangle(d, win, gc, x, y, w, h) \
3030 gdk_draw_rectangle (FRAME_GTK_WIDGET (f)->window, \ 3029 gdk_draw_rectangle (window, gc, TRUE, x, y, w, h)
3031 gc, TRUE, x, y, w, h)
3032#else 3030#else
3033 GC gc; 3031 GC gc;
3034 3032
@@ -4428,7 +4426,8 @@ xg_scroll_callback (GtkRange *range,
4428 && FRAME_X_DISPLAY_INFO (f)->grabbed < (1 << 4)) 4426 && FRAME_X_DISPLAY_INFO (f)->grabbed < (1 << 4))
4429 { 4427 {
4430 part = scroll_bar_handle; 4428 part = scroll_bar_handle;
4431 whole = adj->upper - adj->page_size; 4429 whole = gtk_adjustment_get_upper (adj) -
4430 gtk_adjustment_get_page_size (adj);
4432 portion = min ((int)position, whole); 4431 portion = min ((int)position, whole);
4433 bar->dragging = make_number ((int)portion); 4432 bar->dragging = make_number ((int)portion);
4434 } 4433 }
@@ -6845,7 +6844,7 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
6845 /* GTK creates windows but doesn't map them. 6844 /* GTK creates windows but doesn't map them.
6846 Only get real positions when mapped. */ 6845 Only get real positions when mapped. */
6847 if (FRAME_GTK_OUTER_WIDGET (f) 6846 if (FRAME_GTK_OUTER_WIDGET (f)
6848 && GTK_WIDGET_MAPPED (FRAME_GTK_OUTER_WIDGET (f))) 6847 && gtk_widget_get_mapped (FRAME_GTK_OUTER_WIDGET (f)))
6849#endif 6848#endif
6850 { 6849 {
6851 x_real_positions (f, &f->left_pos, &f->top_pos); 6850 x_real_positions (f, &f->left_pos, &f->top_pos);
@@ -10109,20 +10108,10 @@ x_term_init (display_name, xrm_option, resource_name)
10109 char *argv[NUM_ARGV]; 10108 char *argv[NUM_ARGV];
10110 char **argv2 = argv; 10109 char **argv2 = argv;
10111 guint id; 10110 guint id;
10112#ifndef HAVE_GTK_MULTIDISPLAY
10113 if (!EQ (Vinitial_window_system, Qx))
10114 error ("Sorry, you cannot connect to X servers with the GTK toolkit");
10115#endif
10116 10111
10117 if (x_initialized++ > 1) 10112 if (x_initialized++ > 1)
10118 { 10113 {
10119#ifdef HAVE_GTK_MULTIDISPLAY 10114 xg_display_open (SDATA (display_name), &dpy);
10120 /* Opening another display. If xg_display_open returns less
10121 than zero, we are probably on GTK 2.0, which can only handle
10122 one display. GTK 2.2 or later can handle more than one. */
10123 if (xg_display_open (SDATA (display_name), &dpy) < 0)
10124#endif
10125 error ("Sorry, this version of GTK can only handle one display");
10126 } 10115 }
10127 else 10116 else
10128 { 10117 {
diff --git a/src/xterm.h b/src/xterm.h
index a766f863c4d..beb2c0638dd 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -661,8 +661,22 @@ enum
661 FRAME_X_WINDOW (f)) 661 FRAME_X_WINDOW (f))
662#else 662#else
663#ifdef USE_GTK 663#ifdef USE_GTK
664/* Functions not present in older Gtk+ */
665
666#ifndef HAVE_GTK_WIDGET_GET_WINDOW
667#define gtk_widget_get_window(w) ((w)->window)
668#endif
669#ifndef HAVE_GTK_WIDGET_GET_MAPPED
670#define gtk_widget_get_mapped(w) (GTK_WIDGET_MAPPED (w))
671#endif
672#ifndef HAVE_GTK_ADJUSTMENT_GET_PAGE_SIZE
673#define gtk_adjustment_get_page_size(w) ((w)->page_size)
674#define gtk_adjustment_get_upper(w) ((w)->upper)
675#endif
676
664#define GTK_WIDGET_TO_X_WIN(w) \ 677#define GTK_WIDGET_TO_X_WIN(w) \
665 ((w) && (w)->window ? GDK_WINDOW_XWINDOW ((w)->window) : 0) 678 ((w) && gtk_widget_get_window (w) \
679 ? GDK_WINDOW_XWINDOW (gtk_widget_get_window (w)) : 0)
666 680
667#define FRAME_GTK_OUTER_WIDGET(f) ((f)->output_data.x->widget) 681#define FRAME_GTK_OUTER_WIDGET(f) ((f)->output_data.x->widget)
668#define FRAME_GTK_WIDGET(f) ((f)->output_data.x->edit_widget) 682#define FRAME_GTK_WIDGET(f) ((f)->output_data.x->edit_widget)