diff --git a/ChangeLog b/ChangeLog index 6193fef28d..b1e01564c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2008-03-25 Sven Neumann + + * app/display/gimpstatusbar.[ch]: added gimp_statusbar_peek(), a + method to access the contents of the statusbar. + + * app/display/gimpdisplayshell.c + (gimp_display_shell_window_state_event): when the iconfied state + changes, call gimp_display_shell_progress_window_state_changed(). + + * app/display/gimpdisplayshell-progress.[ch]: when the image + window is iconified, display the progress message in the window + title so that it appears in the task bar. + + * app/menus/plug-in-menus.c: formatting. + 2008-03-25 Michael Natterer * app/display/gimpdisplayshell-callbacks.[ch]: remove the window diff --git a/app/display/gimpdisplayshell-progress.c b/app/display/gimpdisplayshell-progress.c index fef720bfbf..974b76b706 100644 --- a/app/display/gimpdisplayshell-progress.c +++ b/app/display/gimpdisplayshell-progress.c @@ -28,9 +28,18 @@ #include "gimpdisplayshell.h" #include "gimpdisplayshell-progress.h" +#include "gimpdisplayshell-title.h" #include "gimpstatusbar.h" +/* Progress is shown in the status-bar. If the image window is iconified, + * the progress messages are also shown in the window title so that they + * appear in the task bar. + */ + +static gboolean gimp_display_shell_is_iconified (GimpDisplayShell *shell); + + static GimpProgress * gimp_display_shell_progress_start (GimpProgress *progress, const gchar *message, @@ -38,8 +47,15 @@ gimp_display_shell_progress_start (GimpProgress *progress, { GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); - return gimp_progress_start (GIMP_PROGRESS (shell->statusbar), - message, cancelable); + progress = gimp_progress_start (GIMP_PROGRESS (shell->statusbar), + message, cancelable); + + if (progress && gimp_display_shell_is_iconified (shell)) + { + gdk_window_set_title (GTK_WIDGET (shell)->window, message); + } + + return progress; } static void @@ -48,6 +64,9 @@ gimp_display_shell_progress_end (GimpProgress *progress) GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); gimp_progress_end (GIMP_PROGRESS (shell->statusbar)); + + if (gimp_display_shell_is_iconified (shell)) + gimp_display_shell_title_update (shell); } static gboolean @@ -65,6 +84,12 @@ gimp_display_shell_progress_set_text (GimpProgress *progress, GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress); gimp_progress_set_text (GIMP_PROGRESS (shell->statusbar), message); + + if (gimp_progress_is_active (GIMP_PROGRESS (shell->statusbar)) && + gimp_display_shell_is_iconified (shell)) + { + gdk_window_set_title (GTK_WIDGET (shell)->window, message); + } } static void @@ -130,6 +155,16 @@ gimp_display_shell_progress_message (GimpProgress *progress, return FALSE; } +static gboolean +gimp_display_shell_is_iconified (GimpDisplayShell *shell) +{ + GtkWidget *widget = GTK_WIDGET (shell); + + return (GTK_WIDGET_DRAWABLE (widget) && + gdk_window_get_state (widget->window) == GDK_WINDOW_STATE_ICONIFIED); +} + + void gimp_display_shell_progress_iface_init (GimpProgressInterface *iface) { @@ -143,3 +178,23 @@ gimp_display_shell_progress_iface_init (GimpProgressInterface *iface) iface->get_window = gimp_display_shell_progress_get_window; iface->message = gimp_display_shell_progress_message; } + +void +gimp_display_shell_progress_window_state_changed (GimpDisplayShell *shell) +{ + if (! gimp_progress_is_active (GIMP_PROGRESS (shell))) + return; + + if (gimp_display_shell_is_iconified (shell)) + { + const gchar *msg = gimp_statusbar_peek (GIMP_STATUSBAR (shell->statusbar), + "progress"); + if (msg) + { + gdk_window_set_title (GTK_WIDGET (shell)->window, msg); + return; + } + } + + gimp_display_shell_title_update (shell); +} diff --git a/app/display/gimpdisplayshell-progress.h b/app/display/gimpdisplayshell-progress.h index 46ed2db2e3..e408f964d0 100644 --- a/app/display/gimpdisplayshell-progress.h +++ b/app/display/gimpdisplayshell-progress.h @@ -22,7 +22,9 @@ #include "core/gimpprogress.h" -void gimp_display_shell_progress_iface_init (GimpProgressInterface *iface); +void gimp_display_shell_progress_iface_init (GimpProgressInterface *iface); + +void gimp_display_shell_progress_window_state_changed (GimpDisplayShell *shell); #endif /* __GIMP_DISPLAY_SHELL_PROGRESS_H__ */ diff --git a/app/display/gimpdisplayshell.c b/app/display/gimpdisplayshell.c index a8b5eb1290..53a9bb8769 100644 --- a/app/display/gimpdisplayshell.c +++ b/app/display/gimpdisplayshell.c @@ -602,6 +602,11 @@ gimp_display_shell_window_state_event (GtkWidget *widget, } } + if (event->changed_mask & GDK_WINDOW_STATE_ICONIFIED) + { + gimp_display_shell_progress_window_state_changed (shell); + } + return FALSE; } diff --git a/app/display/gimpstatusbar.c b/app/display/gimpstatusbar.c index e576408d45..7728bdcf8a 100644 --- a/app/display/gimpstatusbar.c +++ b/app/display/gimpstatusbar.c @@ -825,6 +825,31 @@ gimp_statusbar_replace_valist (GimpStatusbar *statusbar, gimp_statusbar_update (statusbar); } +const gchar * +gimp_statusbar_peek (GimpStatusbar *statusbar, + const gchar *context) +{ + GSList *list; + guint context_id; + + g_return_if_fail (GIMP_IS_STATUSBAR (statusbar)); + g_return_if_fail (context != NULL); + + context_id = gimp_statusbar_get_context_id (statusbar, context); + + for (list = statusbar->messages; list; list = list->next) + { + GimpStatusbarMsg *msg = list->data; + + if (msg->context_id == context_id) + { + return msg->text; + } + } + + return NULL; +} + void gimp_statusbar_pop (GimpStatusbar *statusbar, const gchar *context) diff --git a/app/display/gimpstatusbar.h b/app/display/gimpstatusbar.h index 5a937f9b03..c682c6a867 100644 --- a/app/display/gimpstatusbar.h +++ b/app/display/gimpstatusbar.h @@ -109,6 +109,8 @@ void gimp_statusbar_replace_valist (GimpStatusbar *statusbar, const gchar *context, const gchar *format, va_list args); +const gchar * gimp_statusbar_peek (GimpStatusbar *statusbar, + const gchar *context); void gimp_statusbar_pop (GimpStatusbar *statusbar, const gchar *context); diff --git a/app/menus/plug-in-menus.c b/app/menus/plug-in-menus.c index 69c2d7192c..39fe893fbd 100644 --- a/app/menus/plug-in-menus.c +++ b/app/menus/plug-in-menus.c @@ -510,7 +510,7 @@ plug_in_menus_build_path (GimpUIManager *manager, action_path)) { GIMP_LOG (MENUS, "adding menu '%s' at path '%s' for action '%s'", - menu_item_name, action_path, menu_path); + menu_item_name, action_path, menu_path); gtk_ui_manager_add_ui (GTK_UI_MANAGER (manager), merge_id, parent_action_path, menu_item_name,