diff options
| author | Jan D | 2010-06-28 12:11:26 +0200 |
|---|---|---|
| committer | Jan D | 2010-06-28 12:11:26 +0200 |
| commit | e547b05103d5e7821488d2013c4daccdea1fc763 (patch) | |
| tree | 991e59b1e487d5636b345ce34640f2ca18493255 /src | |
| parent | 1180f752898ae71089f090f16f531157b31e5841 (diff) | |
| download | emacs-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/ChangeLog | 56 | ||||
| -rw-r--r-- | src/config.in | 29 | ||||
| -rw-r--r-- | src/gtkutil.c | 227 | ||||
| -rw-r--r-- | src/gtkutil.h | 5 | ||||
| -rw-r--r-- | src/xmenu.c | 2 | ||||
| -rw-r--r-- | src/xterm.c | 27 | ||||
| -rw-r--r-- | src/xterm.h | 16 |
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 @@ | |||
| 1 | 2010-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 | |||
| 1 | 2010-06-28 Chong Yidong <cyd@stupidchicken.com> | 57 | 2010-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 | ||
| 105 | int | 112 | void |
| 106 | xg_display_open (display_name, dpy) | 113 | xg_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) | |||
| 133 | void | 133 | void |
| 134 | xg_display_close (Display *dpy) | 134 | xg_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) | |||
| 1313 | int | 1310 | int |
| 1314 | xg_uses_old_file_dialog () | 1311 | xg_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 | ||
| 1331 | typedef char * (*xg_get_file_func) P_ ((GtkWidget *)); | 1322 | typedef 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 | ||
| 3488 | static GtkWidget * | ||
| 3489 | xg_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 | ||
| 3790 | static void | 3779 | static void |
| 3791 | xg_create_tool_bar (f) | 3780 | xg_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. */ |
| 43 | enum button_type | 42 | enum 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 |
| 123 | extern int use_old_gtk_file_dialog; | 122 | extern 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, | |||
| 187 | extern void xg_frame_set_char_size P_ ((FRAME_PTR f, int cols, int rows)); | 186 | extern void xg_frame_set_char_size P_ ((FRAME_PTR f, int cols, int rows)); |
| 188 | extern GtkWidget * xg_win_to_widget P_ ((Display *dpy, Window wdesc)); | 187 | extern GtkWidget * xg_win_to_widget P_ ((Display *dpy, Window wdesc)); |
| 189 | 188 | ||
| 190 | extern int xg_display_open P_ ((char *display_name, Display **dpy)); | 189 | extern void xg_display_open P_ ((char *display_name, Display **dpy)); |
| 191 | extern void xg_display_close P_ ((Display *dpy)); | 190 | extern void xg_display_close P_ ((Display *dpy)); |
| 192 | extern GdkCursor * xg_create_default_cursor P_ ((Display *dpy)); | 191 | extern 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) |