diff --git a/app/actions/actions.c b/app/actions/actions.c index a95a8273bd..85ff0cff34 100644 --- a/app/actions/actions.c +++ b/app/actions/actions.c @@ -631,30 +631,24 @@ action_message (GimpDisplay *display, const gchar *format, ...) { - GimpImageWindow *window; + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (display->shell); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); + const gchar *stock_id = NULL; + va_list args; - window = gimp_display_shell_get_window (GIMP_DISPLAY_SHELL (display->shell)); - - if (window) + if (GIMP_IS_TOOL_OPTIONS (object)) { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - const gchar *stock_id = NULL; - va_list args; + GimpToolInfo *tool_info = GIMP_TOOL_OPTIONS (object)->tool_info; - if (GIMP_IS_TOOL_OPTIONS (object)) - { - GimpToolInfo *tool_info = GIMP_TOOL_OPTIONS (object)->tool_info; - - stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool_info)); - } - else if (GIMP_IS_VIEWABLE (object)) - { - stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (object)); - } - - va_start (args, format); - gimp_statusbar_push_temp_valist (statusbar, GIMP_MESSAGE_INFO, - stock_id, format, args); - va_end (args); + stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool_info)); } + else if (GIMP_IS_VIEWABLE (object)) + { + stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (object)); + } + + va_start (args, format); + gimp_statusbar_push_temp_valist (statusbar, GIMP_MESSAGE_INFO, + stock_id, format, args); + va_end (args); } diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c index 6fa6ffb18a..4952628934 100644 --- a/app/display/gimpdisplay.c +++ b/app/display/gimpdisplay.c @@ -429,8 +429,7 @@ gimp_display_new (Gimp *gimp, gimp_image_window_set_active_shell (window, GIMP_DISPLAY_SHELL (display->shell)); - /* FIXME image window */ - g_signal_connect (gimp_image_window_get_statusbar (GIMP_IMAGE_WINDOW (window)), + g_signal_connect (gimp_display_shell_get_statusbar (GIMP_DISPLAY_SHELL (display->shell)), "cancel", G_CALLBACK (gimp_display_progress_canceled), display); diff --git a/app/display/gimpdisplayshell-appearance.c b/app/display/gimpdisplayshell-appearance.c index 1ac3fde88c..e9600c854b 100644 --- a/app/display/gimpdisplayshell-appearance.c +++ b/app/display/gimpdisplayshell-appearance.c @@ -74,8 +74,14 @@ gimp_display_shell_appearance_update (GimpDisplayShell *shell) window = gimp_display_shell_get_window (shell); if (window) - appearance_set_action_active (shell, "view-fullscreen", - gimp_image_window_get_fullscreen (window)); + { + gboolean fullscreen = gimp_image_window_get_fullscreen (window); + + appearance_set_action_active (shell, "view-fullscreen", fullscreen); + + gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (shell->statusbar), + ! fullscreen); + } gimp_display_shell_set_show_menubar (shell, options->show_menubar); @@ -136,19 +142,14 @@ gimp_display_shell_set_show_statusbar (GimpDisplayShell *shell, gboolean show) { GimpDisplayOptions *options; - GimpImageWindow *window; g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); options = appearance_get_options (shell); - window = gimp_display_shell_get_window (shell); g_object_set (options, "show-statusbar", show, NULL); - if (window && gimp_image_window_get_active_shell (window) == shell) - { - gimp_image_window_set_show_statusbar (window, show); - } + gimp_statusbar_set_visible (GIMP_STATUSBAR (shell->statusbar), show); appearance_set_action_active (shell, "view-show-statusbar", show); } diff --git a/app/display/gimpdisplayshell-cursor.c b/app/display/gimpdisplayshell-cursor.c index cb00e79644..c2fe29445e 100644 --- a/app/display/gimpdisplayshell-cursor.c +++ b/app/display/gimpdisplayshell-cursor.c @@ -37,7 +37,6 @@ #include "gimpdisplayshell-cursor.h" #include "gimpdisplayshell-expose.h" #include "gimpdisplayshell-transform.h" -#include "gimpimagewindow.h" #include "gimpstatusbar.h" @@ -126,7 +125,7 @@ gimp_display_shell_update_cursor (GimpDisplayShell *shell, gdouble image_x, gdouble image_y) { - GimpImageWindow *window; + GimpStatusbar *statusbar; GimpDialogFactory *factory; GimpSessionInfo *session_info; GimpImage *image; @@ -162,14 +161,9 @@ gimp_display_shell_update_cursor (GimpDisplayShell *shell, /* use the passed image_coords for the statusbar because they are * possibly snapped... */ - window = gimp_display_shell_get_window (shell); + statusbar = gimp_display_shell_get_statusbar (shell); - if (window && gimp_image_window_get_active_shell (window)) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - - gimp_statusbar_update_cursor (statusbar, precision, image_x, image_y); - } + gimp_statusbar_update_cursor (statusbar, precision, image_x, image_y); factory = gimp_dialog_factory_from_name ("dock"); session_info = gimp_dialog_factory_find_session_info (factory, @@ -200,20 +194,15 @@ gimp_display_shell_update_cursor (GimpDisplayShell *shell, void gimp_display_shell_clear_cursor (GimpDisplayShell *shell) { - GimpImageWindow *window; + GimpStatusbar *statusbar; GimpDialogFactory *factory; GimpSessionInfo *session_info; g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); - window = gimp_display_shell_get_window (shell); + statusbar = gimp_display_shell_get_statusbar (shell); - if (window && gimp_image_window_get_active_shell (window) == shell) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - - gimp_statusbar_clear_cursor (statusbar); - } + gimp_statusbar_clear_cursor (statusbar); factory = gimp_dialog_factory_from_name ("dock"); session_info = gimp_dialog_factory_find_session_info (factory, diff --git a/app/display/gimpdisplayshell-handlers.c b/app/display/gimpdisplayshell-handlers.c index 6882c06e93..d73a43341b 100644 --- a/app/display/gimpdisplayshell-handlers.c +++ b/app/display/gimpdisplayshell-handlers.c @@ -586,18 +586,13 @@ gimp_display_shell_saved_handler (GimpImage *image, const gchar *uri, GimpDisplayShell *shell) { - GimpImageWindow *window = gimp_display_shell_get_window (shell); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); + gchar *filename = file_utils_uri_display_name (uri); - if (window && gimp_image_window_get_active_shell (window) == shell) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - gchar *filename = file_utils_uri_display_name (uri); - - gimp_statusbar_push_temp (statusbar, GIMP_MESSAGE_INFO, - GTK_STOCK_SAVE, _("Image saved to '%s'"), - filename); - g_free (filename); - } + gimp_statusbar_push_temp (statusbar, GIMP_MESSAGE_INFO, + GTK_STOCK_SAVE, _("Image saved to '%s'"), + filename); + g_free (filename); } static void @@ -605,18 +600,13 @@ gimp_display_shell_exported_handler (GimpImage *image, const gchar *uri, GimpDisplayShell *shell) { - GimpImageWindow *window = gimp_display_shell_get_window (shell); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); + gchar *filename = file_utils_uri_display_name (uri); - if (window && gimp_image_window_get_active_shell (window) == shell) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - gchar *filename = file_utils_uri_display_name (uri); - - gimp_statusbar_push_temp (statusbar, GIMP_MESSAGE_INFO, - GTK_STOCK_SAVE, _("Image exported to '%s'"), - filename); - g_free (filename); - } + gimp_statusbar_push_temp (statusbar, GIMP_MESSAGE_INFO, + GTK_STOCK_SAVE, _("Image exported to '%s'"), + filename); + g_free (filename); } static void diff --git a/app/display/gimpdisplayshell-progress.c b/app/display/gimpdisplayshell-progress.c index ffd318c849..36729e934d 100644 --- a/app/display/gimpdisplayshell-progress.c +++ b/app/display/gimpdisplayshell-progress.c @@ -27,104 +27,74 @@ #include "gimpdisplayshell.h" #include "gimpdisplayshell-progress.h" -#include "gimpimagewindow.h" #include "gimpstatusbar.h" -/* FIXME: need to store the shell's progress state in the shell itself - * instead of simply dispatching to the statusbar. Otherwise it's - * impossible to switch an image window between two shells that both - * have active progress messages. - */ - - -static GimpProgress * -gimp_display_shell_progress_get_real_progress (GimpProgress *progress) -{ - GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); - GimpImageWindow *window = gimp_display_shell_get_window (shell); - - if (window && gimp_image_window_get_active_shell (window) == shell) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - - return GIMP_PROGRESS (statusbar); - } - - return NULL; -} - static GimpProgress * gimp_display_shell_progress_start (GimpProgress *progress, const gchar *message, gboolean cancelable) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) - return gimp_progress_start (progress, message, cancelable); - - return NULL; + return gimp_progress_start (GIMP_PROGRESS (statusbar), message, cancelable); } static void gimp_display_shell_progress_end (GimpProgress *progress) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) - gimp_progress_end (progress); + gimp_progress_end (GIMP_PROGRESS (statusbar)); } static gboolean gimp_display_shell_progress_is_active (GimpProgress *progress) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) - return gimp_progress_is_active (progress); - - return FALSE; + return gimp_progress_is_active (GIMP_PROGRESS (statusbar)); } static void gimp_display_shell_progress_set_text (GimpProgress *progress, const gchar *message) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) - gimp_progress_set_text (progress, message); + gimp_progress_set_text (GIMP_PROGRESS (statusbar), message); } static void gimp_display_shell_progress_set_value (GimpProgress *progress, gdouble percentage) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) - gimp_progress_set_value (progress, percentage); + gimp_progress_set_value (GIMP_PROGRESS (statusbar), percentage); } static gdouble gimp_display_shell_progress_get_value (GimpProgress *progress) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) - return gimp_progress_get_value (progress); - - return 0.0; + return gimp_progress_get_value (GIMP_PROGRESS (statusbar)); } static void gimp_display_shell_progress_pulse (GimpProgress *progress) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) - gimp_progress_pulse (progress); + gimp_progress_pulse (GIMP_PROGRESS (statusbar)); } static guint32 @@ -145,32 +115,30 @@ gimp_display_shell_progress_message (GimpProgress *progress, const gchar *domain, const gchar *message) { - progress = gimp_display_shell_progress_get_real_progress (progress); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (progress) + switch (severity) { - switch (severity) - { - case GIMP_MESSAGE_ERROR: - /* error messages are never handled here */ - break; + case GIMP_MESSAGE_ERROR: + /* error messages are never handled here */ + break; - case GIMP_MESSAGE_WARNING: - /* warning messages go to the statusbar, if it's visible */ - if (! gimp_statusbar_get_visible (GIMP_STATUSBAR (progress))) - break; - else - return gimp_progress_message (progress, gimp, - severity, domain, message); + case GIMP_MESSAGE_WARNING: + /* warning messages go to the statusbar, if it's visible */ + if (! gimp_statusbar_get_visible (statusbar)) + break; + else + return gimp_progress_message (GIMP_PROGRESS (statusbar), gimp, + severity, domain, message); - case GIMP_MESSAGE_INFO: - /* info messages go to the statusbar; - * if they are not handled there, they are swallowed - */ - gimp_progress_message (progress, gimp, - severity, domain, message); - return TRUE; - } + case GIMP_MESSAGE_INFO: + /* info messages go to the statusbar; + * if they are not handled there, they are swallowed + */ + gimp_progress_message (GIMP_PROGRESS (statusbar), gimp, + severity, domain, message); + return TRUE; } return FALSE; diff --git a/app/display/gimpdisplayshell.c b/app/display/gimpdisplayshell.c index f362a2e2db..d3ff17ef9d 100644 --- a/app/display/gimpdisplayshell.c +++ b/app/display/gimpdisplayshell.c @@ -859,10 +859,12 @@ gimp_display_shell_new (GimpDisplay *display, * | +-- vscrollbar * | * +-- lower_hbox - * | - * +-- quick_mask - * +-- hscrollbar - * +-- navbutton + * | | + * | +-- quick_mask + * | +-- hscrollbar + * | +-- navbutton + * | + * +-- statusbar */ /* first, set up the container hierarchy *********************************/ @@ -1080,6 +1082,14 @@ gimp_display_shell_new (GimpDisplay *display, _("Navigate the image display"), GIMP_HELP_IMAGE_WINDOW_NAV_BUTTON); + /* the statusbar ********************************************************/ + + shell->statusbar = gimp_statusbar_new (); + gimp_statusbar_set_shell (GIMP_STATUSBAR (shell->statusbar), shell); + gimp_help_set_help_data (shell->statusbar, NULL, + GIMP_HELP_IMAGE_WINDOW_STATUS_BAR); + gtk_box_pack_end (GTK_BOX (shell), shell->statusbar, FALSE, FALSE, 0); + /* pack all the widgets **************************************************/ /* fill the inner_table */ @@ -1139,6 +1149,8 @@ gimp_display_shell_new (GimpDisplay *display, gimp_help_set_help_data (shell->canvas, _("Drop image files here to open them"), NULL); + + gimp_statusbar_empty (GIMP_STATUSBAR (shell->statusbar)); } /* make sure the information is up-to-date */ @@ -1156,6 +1168,14 @@ gimp_display_shell_get_window (GimpDisplayShell *shell) GIMP_TYPE_IMAGE_WINDOW)); } +GimpStatusbar * +gimp_display_shell_get_statusbar (GimpDisplayShell *shell) +{ + g_return_val_if_fail (GIMP_IS_DISPLAY_SHELL (shell), NULL); + + return GIMP_STATUSBAR (shell->statusbar); +} + void gimp_display_shell_reconnect (GimpDisplayShell *shell) { @@ -1206,6 +1226,8 @@ gimp_display_shell_empty (GimpDisplayShell *shell) gimp_help_set_help_data (shell->canvas, _("Drop image files here to open them"), NULL); + gimp_statusbar_empty (GIMP_STATUSBAR (shell->statusbar)); + gimp_display_shell_expose_full (shell); user_context = gimp_get_user_context (shell->display->gimp); @@ -1251,6 +1273,8 @@ gimp_display_shell_fill (GimpDisplayShell *shell, gimp_help_set_help_data (shell->canvas, NULL, NULL); + gimp_statusbar_fill (GIMP_STATUSBAR (shell->statusbar)); + /* A size-allocate will always occur because the scrollbars will * become visible forcing the canvas to become smaller */ diff --git a/app/display/gimpdisplayshell.h b/app/display/gimpdisplayshell.h index 081b19a677..9a489fc427 100644 --- a/app/display/gimpdisplayshell.h +++ b/app/display/gimpdisplayshell.h @@ -135,6 +135,8 @@ struct _GimpDisplayShell GtkWidget *zoom_button; /* NE: zoom toggle button */ GtkWidget *nav_ebox; /* SE: navigation event box */ + GtkWidget *statusbar; /* statusbar */ + guchar *render_buf; /* buffer for rendering the image */ guint title_idle_id; /* title update idle ID */ @@ -223,6 +225,8 @@ GtkWidget * gimp_display_shell_new (GimpDisplay *display, GimpImageWindow * gimp_display_shell_get_window (GimpDisplayShell *shell); +GimpStatusbar * gimp_display_shell_get_statusbar (GimpDisplayShell *shell); + void gimp_display_shell_reconnect (GimpDisplayShell *shell); void gimp_display_shell_empty (GimpDisplayShell *shell); diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c index 3439ede222..9bc6df29b1 100644 --- a/app/display/gimpimagewindow.c +++ b/app/display/gimpimagewindow.c @@ -81,7 +81,6 @@ struct _GimpImageWindowPrivate GtkWidget *right_hpane; GtkWidget *notebook; GtkWidget *right_docks; - GtkWidget *statusbar; GdkWindowState window_state; gboolean is_empty; @@ -142,9 +141,6 @@ static void gimp_image_window_shell_scaled (GimpDisplayShell *she static void gimp_image_window_shell_title_notify (GimpDisplayShell *shell, const GParamSpec *pspec, GimpImageWindow *window); -static void gimp_image_window_shell_status_notify (GimpDisplayShell *shell, - const GParamSpec *pspec, - GimpImageWindow *window); static void gimp_image_window_shell_icon_notify (GimpDisplayShell *shell, const GParamSpec *pspec, GimpImageWindow *window); @@ -319,13 +315,6 @@ gimp_image_window_constructor (GType type, if (config->single_window_mode) gtk_widget_show (private->right_docks); - /* Create the statusbar */ - private->statusbar = gimp_statusbar_new (); - gimp_help_set_help_data (private->statusbar, NULL, - GIMP_HELP_IMAGE_WINDOW_STATUS_BAR); - gtk_box_pack_end (GTK_BOX (private->main_vbox), private->statusbar, - FALSE, FALSE, 0); - return object; } @@ -480,15 +469,13 @@ gimp_image_window_window_state_event (GtkWidget *widget, gtk_widget_set_name (private->menubar, fullscreen ? "gimp-menubar-fullscreen" : NULL); - gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (private->statusbar), - ! fullscreen); - gimp_display_shell_appearance_update (shell); } if (event->changed_mask & GDK_WINDOW_STATE_ICONIFIED) { - gboolean iconified = gimp_image_window_is_iconified (window); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); + gboolean iconified = gimp_image_window_is_iconified (window); GIMP_LOG (WM, "Image window '%s' [%p] set %s", gtk_window_get_title (GTK_WINDOW (widget)), @@ -509,10 +496,8 @@ gimp_image_window_window_state_event (GtkWidget *widget, gimp_dialog_factories_show_with_display (); } - if (gimp_progress_is_active (GIMP_PROGRESS (private->statusbar))) + if (gimp_progress_is_active (GIMP_PROGRESS (statusbar))) { - GimpStatusbar *statusbar = GIMP_STATUSBAR (private->statusbar); - if (iconified) gimp_statusbar_override_window_title (statusbar); else @@ -527,15 +512,17 @@ static void gimp_image_window_style_set (GtkWidget *widget, GtkStyle *prev_style) { - GimpImageWindow *window = GIMP_IMAGE_WINDOW (widget); - GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); + GimpImageWindow *window = GIMP_IMAGE_WINDOW (widget); + GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); + GimpDisplayShell *shell = gimp_image_window_get_active_shell (window); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); GtkRequisition requisition; GdkGeometry geometry; GdkWindowHints geometry_mask; GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style); - gtk_widget_size_request (private->statusbar, &requisition); + gtk_widget_size_request (GTK_WIDGET (statusbar), &requisition); geometry.min_height = 23; @@ -579,18 +566,6 @@ gimp_image_window_get_ui_manager (GimpImageWindow *window) return private->menubar_manager; } -GimpStatusbar * -gimp_image_window_get_statusbar (GimpImageWindow *window) -{ - GimpImageWindowPrivate *private; - - g_return_val_if_fail (GIMP_IS_IMAGE_WINDOW (window), FALSE); - - private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); - - return GIMP_STATUSBAR (private->statusbar); -} - GimpDockColumns * gimp_image_window_get_left_docks (GimpImageWindow *window) { @@ -777,31 +752,6 @@ gimp_image_window_get_show_menubar (GimpImageWindow *window) return GTK_WIDGET_VISIBLE (private->menubar); } -void -gimp_image_window_set_show_statusbar (GimpImageWindow *window, - gboolean show) -{ - GimpImageWindowPrivate *private; - - g_return_if_fail (GIMP_IS_IMAGE_WINDOW (window)); - - private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); - - gimp_statusbar_set_visible (GIMP_STATUSBAR (private->statusbar), show); -} - -gboolean -gimp_image_window_get_show_statusbar (GimpImageWindow *window) -{ - GimpImageWindowPrivate *private; - - g_return_val_if_fail (GIMP_IS_IMAGE_WINDOW (window), FALSE); - - private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); - - return GTK_WIDGET_VISIBLE (private->statusbar); -} - void gimp_image_window_set_show_docks (GimpImageWindow *window, gboolean show) @@ -942,8 +892,10 @@ gimp_image_window_shrink_wrap (GimpImageWindow *window, if (resize) { - if (width < private->statusbar->requisition.width) - width = private->statusbar->requisition.width; + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (active_shell); + + if (width < GTK_WIDGET (statusbar)->requisition.width) + width = GTK_WIDGET (statusbar)->requisition.width; width = width + border_width; height = height + border_height; @@ -976,9 +928,10 @@ gimp_image_window_show_tooltip (GimpUIManager *manager, const gchar *tooltip, GimpImageWindow *window) { - GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); + GimpDisplayShell *shell = gimp_image_window_get_active_shell (window); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - gimp_statusbar_push (GIMP_STATUSBAR (private->statusbar), "menu-tooltip", + gimp_statusbar_push (statusbar, "menu-tooltip", NULL, "%s", tooltip); } @@ -986,9 +939,10 @@ static void gimp_image_window_hide_tooltip (GimpUIManager *manager, GimpImageWindow *window) { - GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); + GimpDisplayShell *shell = gimp_image_window_get_active_shell (window); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - gimp_statusbar_pop (GIMP_STATUSBAR (private->statusbar), "menu-tooltip"); + gimp_statusbar_pop (statusbar, "menu-tooltip"); } static gboolean @@ -1030,12 +984,11 @@ gimp_image_window_switch_page (GtkNotebook *notebook, g_signal_handlers_disconnect_by_func (private->active_shell, gimp_image_window_shell_title_notify, window); - g_signal_handlers_disconnect_by_func (private->active_shell, - gimp_image_window_shell_status_notify, - window); g_signal_handlers_disconnect_by_func (private->active_shell, gimp_image_window_shell_icon_notify, window); + + gimp_image_window_hide_tooltip (private->menubar_manager, window); } private->active_shell = shell; @@ -1046,18 +999,12 @@ gimp_image_window_switch_page (GtkNotebook *notebook, G_CALLBACK (gimp_image_window_image_notify), window); - gimp_statusbar_set_shell (GIMP_STATUSBAR (private->statusbar), - private->active_shell); - g_signal_connect (private->active_shell, "scaled", G_CALLBACK (gimp_image_window_shell_scaled), window); g_signal_connect (private->active_shell, "notify::title", G_CALLBACK (gimp_image_window_shell_title_notify), window); - g_signal_connect (private->active_shell, "notify::status", - G_CALLBACK (gimp_image_window_shell_status_notify), - window); g_signal_connect (private->active_shell, "notify::icon", G_CALLBACK (gimp_image_window_shell_icon_notify), window); @@ -1066,8 +1013,6 @@ gimp_image_window_switch_page (GtkNotebook *notebook, if (! active_display->image) { - gimp_statusbar_empty (GIMP_STATUSBAR (private->statusbar)); - gimp_dialog_factory_add_foreign (private->display_factory, "gimp-empty-image-window", GTK_WIDGET (window)); @@ -1092,8 +1037,6 @@ gimp_image_window_image_notify (GimpDisplay *display, gimp_dialog_factory_remove_dialog (private->display_factory, GTK_WIDGET (window)); - - gimp_statusbar_fill (GIMP_STATUSBAR (private->statusbar)); } } else if (g_list_length (private->shells) == 1) @@ -1129,8 +1072,6 @@ gimp_image_window_image_notify (GimpDisplay *display, "gimp-empty-image-window", GTK_WIDGET (window)); - gimp_statusbar_empty (GIMP_STATUSBAR (private->statusbar)); - gtk_window_unmaximize (GTK_WINDOW (window)); gtk_window_resize (GTK_WINDOW (window), width, height); } @@ -1163,17 +1104,6 @@ gimp_image_window_shell_title_notify (GimpDisplayShell *shell, gtk_window_set_title (GTK_WINDOW (window), shell->title); } -static void -gimp_image_window_shell_status_notify (GimpDisplayShell *shell, - const GParamSpec *pspec, - GimpImageWindow *window) -{ - GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); - - gimp_statusbar_replace (GIMP_STATUSBAR (private->statusbar), "title", - NULL, "%s", shell->status); -} - static void gimp_image_window_shell_icon_notify (GimpDisplayShell *shell, const GParamSpec *pspec, diff --git a/app/display/gimpimagewindow.h b/app/display/gimpimagewindow.h index edacc66f9f..b110b7ebbb 100644 --- a/app/display/gimpimagewindow.h +++ b/app/display/gimpimagewindow.h @@ -46,7 +46,6 @@ struct _GimpImageWindowClass GType gimp_image_window_get_type (void) G_GNUC_CONST; GimpUIManager * gimp_image_window_get_ui_manager (GimpImageWindow *window); -GimpStatusbar * gimp_image_window_get_statusbar (GimpImageWindow *window); GimpDockColumns * gimp_image_window_get_left_docks (GimpImageWindow *window); GimpDockColumns * gimp_image_window_get_right_docks (GimpImageWindow *window); diff --git a/app/display/gimpstatusbar.c b/app/display/gimpstatusbar.c index edb3bbbf9d..9ff4388d2b 100644 --- a/app/display/gimpstatusbar.c +++ b/app/display/gimpstatusbar.c @@ -110,6 +110,9 @@ static void gimp_statusbar_scale_activated (GimpScaleComboBox *combo, GimpStatusbar *statusbar); static void gimp_statusbar_shell_scaled (GimpDisplayShell *shell, GimpStatusbar *statusbar); +static void gimp_statusbar_shell_status_notify(GimpDisplayShell *shell, + const GParamSpec *pspec, + GimpStatusbar *statusbar); static guint gimp_statusbar_get_context_id (GimpStatusbar *statusbar, const gchar *context); static gboolean gimp_statusbar_temp_timeout (GimpStatusbar *statusbar); @@ -676,6 +679,10 @@ gimp_statusbar_set_shell (GimpStatusbar *statusbar, g_signal_handlers_disconnect_by_func (statusbar->shell, gimp_statusbar_shell_scaled, statusbar); + + g_signal_handlers_disconnect_by_func (statusbar->shell, + gimp_statusbar_shell_status_notify, + statusbar); } statusbar->shell = shell; @@ -683,6 +690,10 @@ gimp_statusbar_set_shell (GimpStatusbar *statusbar, g_signal_connect_object (statusbar->shell, "scaled", G_CALLBACK (gimp_statusbar_shell_scaled), statusbar, 0); + + g_signal_connect_object (statusbar->shell, "notify::status", + G_CALLBACK (gimp_statusbar_shell_status_notify), + statusbar, 0); } gboolean @@ -1427,6 +1438,15 @@ gimp_statusbar_shell_scaled (GimpDisplayShell *shell, gimp_statusbar_clear_cursor (statusbar); } +static void +gimp_statusbar_shell_status_notify (GimpDisplayShell *shell, + const GParamSpec *pspec, + GimpStatusbar *statusbar) +{ + gimp_statusbar_replace (statusbar, "title", + NULL, "%s", shell->status); +} + static void gimp_statusbar_unit_changed (GimpUnitComboBox *combo, GimpStatusbar *statusbar) diff --git a/app/gui/gui.c b/app/gui/gui.c index 978ce81cd1..27c71415eb 100644 --- a/app/gui/gui.c +++ b/app/gui/gui.c @@ -43,7 +43,6 @@ #include "display/gimpdisplay-foreach.h" #include "display/gimpdisplayshell.h" #include "display/gimpdisplayshell-render.h" -#include "display/gimpimagewindow.h" #include "display/gimpstatusbar.h" #include "tools/gimp-tools.h" @@ -721,16 +720,11 @@ gui_menu_show_tooltip (GimpUIManager *manager, if (display) { - GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (display->shell); - GimpImageWindow *window = gimp_display_shell_get_window (shell); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (display->shell); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (window) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - - gimp_statusbar_push (statusbar, "menu-tooltip", - NULL, "%s", tooltip); - } + gimp_statusbar_push (statusbar, "menu-tooltip", + NULL, "%s", tooltip); } } @@ -743,15 +737,10 @@ gui_menu_hide_tooltip (GimpUIManager *manager, if (display) { - GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (display->shell); - GimpImageWindow *window = gimp_display_shell_get_window (shell); + GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (display->shell); + GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell); - if (window) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - - gimp_statusbar_pop (statusbar, "menu-tooltip"); - } + gimp_statusbar_pop (statusbar, "menu-tooltip"); } } diff --git a/app/tools/gimpmeasuretool.c b/app/tools/gimpmeasuretool.c index 788df9b2b2..fa072cf502 100644 --- a/app/tools/gimpmeasuretool.c +++ b/app/tools/gimpmeasuretool.c @@ -44,7 +44,7 @@ #include "display/gimpdisplay.h" #include "display/gimpdisplayshell.h" -#include "display/gimpimagewindow.h" +#include "display/gimpdisplayshell-appearance.h" #include "gimpmeasureoptions.h" #include "gimpmeasuretool.h" @@ -333,10 +333,8 @@ gimp_measure_tool_button_press (GimpTool *tool, /* create the info window if necessary */ if (! measure->dialog) { - GimpImageWindow *window = gimp_display_shell_get_window (shell); - if (options->use_info_window || - ! gimp_image_window_get_show_statusbar (window)) + ! gimp_display_shell_get_show_statusbar (shell)) { measure->dialog = gimp_measure_tool_dialog_new (measure); g_object_add_weak_pointer (G_OBJECT (measure->dialog), diff --git a/app/tools/gimptool.c b/app/tools/gimptool.c index 557b78f396..931b6c479b 100644 --- a/app/tools/gimptool.c +++ b/app/tools/gimptool.c @@ -32,7 +32,6 @@ #include "display/gimpdisplay.h" #include "display/gimpdisplayshell.h" #include "display/gimpdisplayshell-cursor.h" -#include "display/gimpimagewindow.h" #include "display/gimpstatusbar.h" #include "gimptool.h" @@ -896,31 +895,24 @@ gimp_tool_push_status (GimpTool *tool, ...) { GimpDisplayShell *shell; - GimpImageWindow *window; + const gchar *stock_id; + va_list args; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (format != NULL); - shell = GIMP_DISPLAY_SHELL (display->shell); - window = gimp_display_shell_get_window (shell); + shell = GIMP_DISPLAY_SHELL (display->shell); - if (window) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - const gchar *stock_id; - va_list args; + stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); - stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); + va_start (args, format); - va_start (args, format); + gimp_statusbar_push_valist (gimp_display_shell_get_statusbar (shell), + G_OBJECT_TYPE_NAME (tool), stock_id, + format, args); - gimp_statusbar_push_valist (statusbar, - G_OBJECT_TYPE_NAME (tool), stock_id, - format, args); - - va_end (args); - } + va_end (args); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); @@ -937,26 +929,19 @@ gimp_tool_push_status_coords (GimpTool *tool, const gchar *help) { GimpDisplayShell *shell; - GimpImageWindow *window; + const gchar *stock_id; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); - shell = GIMP_DISPLAY_SHELL (display->shell); - window = gimp_display_shell_get_window (shell); + shell = GIMP_DISPLAY_SHELL (display->shell); - if (window) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - const gchar *stock_id; + stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); - stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); - - gimp_statusbar_push_coords (statusbar, - G_OBJECT_TYPE_NAME (tool), stock_id, - precision, title, x, separator, y, - help); - } + gimp_statusbar_push_coords (gimp_display_shell_get_statusbar (shell), + G_OBJECT_TYPE_NAME (tool), stock_id, + precision, title, x, separator, y, + help); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); @@ -971,25 +956,18 @@ gimp_tool_push_status_length (GimpTool *tool, const gchar *help) { GimpDisplayShell *shell; - GimpImageWindow *window; + const gchar *stock_id; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); - shell = GIMP_DISPLAY_SHELL (display->shell); - window = gimp_display_shell_get_window (shell); + shell = GIMP_DISPLAY_SHELL (display->shell); - if (window) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - const gchar *stock_id; + stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); - stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); - - gimp_statusbar_push_length (statusbar, - G_OBJECT_TYPE_NAME (tool), stock_id, - title, axis, value, help); - } + gimp_statusbar_push_length (gimp_display_shell_get_statusbar (shell), + G_OBJECT_TYPE_NAME (tool), stock_id, + title, axis, value, help); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); @@ -1002,31 +980,24 @@ gimp_tool_replace_status (GimpTool *tool, ...) { GimpDisplayShell *shell; - GimpImageWindow *window; + const gchar *stock_id; + va_list args; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (format != NULL); - shell = GIMP_DISPLAY_SHELL (display->shell); - window = gimp_display_shell_get_window (shell); + shell = GIMP_DISPLAY_SHELL (display->shell); - if (window) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - const gchar *stock_id; - va_list args; + stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); - stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); + va_start (args, format); - va_start (args, format); + gimp_statusbar_replace_valist (gimp_display_shell_get_statusbar (shell), + G_OBJECT_TYPE_NAME (tool), stock_id, + format, args); - gimp_statusbar_replace_valist (statusbar, - G_OBJECT_TYPE_NAME (tool), stock_id, - format, args); - - va_end (args); - } + va_end (args); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); @@ -1037,21 +1008,14 @@ gimp_tool_pop_status (GimpTool *tool, GimpDisplay *display) { GimpDisplayShell *shell; - GimpImageWindow *window; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); - shell = GIMP_DISPLAY_SHELL (display->shell); - window = gimp_display_shell_get_window (shell); + shell = GIMP_DISPLAY_SHELL (display->shell); - if (window) - { - GimpStatusbar *statusbar = gimp_image_window_get_statusbar (window); - - gimp_statusbar_pop (statusbar, - G_OBJECT_TYPE_NAME (tool)); - } + gimp_statusbar_pop (gimp_display_shell_get_statusbar (shell), + G_OBJECT_TYPE_NAME (tool)); tool->status_displays = g_list_remove (tool->status_displays, display); }