[Xfce4-commits] <xfce4-panel:master> Handle window autohide blocking in application.
Nick Schermer
noreply at xfce.org
Sat Mar 20 22:36:01 CET 2010
Updating branch refs/heads/master
to 7cbf8ebfe94b89582f2263e54ae7f7dade8ec6ec (commit)
from 52d781745d80b342fcbf5b6af9d0854c13635d2d (commit)
commit 7cbf8ebfe94b89582f2263e54ae7f7dade8ec6ec
Author: Nick Schermer <nick at xfce.org>
Date: Sat Mar 20 22:33:40 2010 +0100
Handle window autohide blocking in application.
panel/panel-application.c | 48 +++++++++++++++++++++----------------
panel/panel-application.h | 3 --
panel/panel-item-dialog.c | 6 ----
panel/panel-preferences-dialog.c | 6 ----
panel/panel-window.c | 6 +++-
5 files changed, 31 insertions(+), 38 deletions(-)
diff --git a/panel/panel-application.c b/panel/panel-application.c
index 784ca6f..498bfd8 100644
--- a/panel/panel-application.c
+++ b/panel/panel-application.c
@@ -718,6 +718,25 @@ panel_application_window_destroyed (GtkWidget *window,
static void
+panel_application_windows_block_autohide (PanelApplication *application,
+ gboolean blocked)
+{
+ GSList *li;
+
+ panel_return_if_fail (PANEL_IS_APPLICATION (application));
+
+ for (li = application->windows; li != NULL; li = li->next)
+ {
+ if (blocked)
+ panel_window_freeze_autohide (PANEL_WINDOW (li->data));
+ else
+ panel_window_thaw_autohide (PANEL_WINDOW (li->data));
+ }
+}
+
+
+
+static void
panel_application_dialog_destroyed (GtkWindow *dialog,
PanelApplication *application)
{
@@ -727,6 +746,10 @@ panel_application_dialog_destroyed (GtkWindow *dialog,
/* remove the window from the list */
application->dialogs = g_slist_remove (application->dialogs, dialog);
+
+ /* unblock autohide if there are no open windows anymore */
+ if (application->dialogs == NULL)
+ panel_application_windows_block_autohide (application, FALSE);
}
@@ -1118,11 +1141,13 @@ panel_application_take_dialog (PanelApplication *application,
panel_return_if_fail (PANEL_IS_APPLICATION (application));
panel_return_if_fail (GTK_IS_WINDOW (dialog));
+ /* block autohide if this will be the first dialog */
+ if (application->dialogs == NULL)
+ panel_application_windows_block_autohide (application, TRUE);
+
/* monitor window destruction */
g_signal_connect (G_OBJECT (dialog), "destroy",
G_CALLBACK (panel_application_dialog_destroyed), application);
-
- /* add the window to internal list */
application->dialogs = g_slist_prepend (application->dialogs, dialog);
}
@@ -1348,25 +1373,6 @@ panel_application_windows_sensitive (PanelApplication *application,
-void
-panel_application_windows_autohide (PanelApplication *application,
- gboolean freeze)
-{
- GSList *li;
-
- panel_return_if_fail (PANEL_IS_APPLICATION (application));
-
- for (li = application->windows; li != NULL; li = li->next)
- {
- if (freeze)
- panel_window_freeze_autohide (PANEL_WINDOW (li->data));
- else
- panel_window_thaw_autohide (PANEL_WINDOW (li->data));
- }
-}
-
-
-
gboolean
panel_application_get_locked (PanelApplication *application)
{
diff --git a/panel/panel-application.h b/panel/panel-application.h
index 5cc15e1..0e77284 100644
--- a/panel/panel-application.h
+++ b/panel/panel-application.h
@@ -68,9 +68,6 @@ void panel_application_window_select (PanelApplication *applic
void panel_application_windows_sensitive (PanelApplication *application,
gboolean sensitive);
-void panel_application_windows_autohide (PanelApplication *application,
- gboolean freeze);
-
gboolean panel_application_get_locked (PanelApplication *application);
G_END_DECLS
diff --git a/panel/panel-item-dialog.c b/panel/panel-item-dialog.c
index f97e6ca..e20cd40 100644
--- a/panel/panel-item-dialog.c
+++ b/panel/panel-item-dialog.c
@@ -162,9 +162,6 @@ panel_item_dialog_init (PanelItemDialog *dialog)
/* make the application windows insensitive */
panel_application_windows_sensitive (dialog->application, FALSE);
- /* block autohide */
- panel_application_windows_autohide (dialog->application, TRUE);
-
dialog->factory = panel_module_factory_get ();
/* monitor unique changes */
@@ -276,9 +273,6 @@ panel_item_dialog_finalize (GObject *object)
/* make the windows sensitive again */
panel_application_windows_sensitive (dialog->application, TRUE);
- /* free autohide block */
- panel_application_windows_autohide (dialog->application, FALSE);
-
g_object_unref (G_OBJECT (dialog->store));
g_object_unref (G_OBJECT (dialog->factory));
g_object_unref (G_OBJECT (dialog->application));
diff --git a/panel/panel-preferences-dialog.c b/panel/panel-preferences-dialog.c
index f557a62..fa29415 100644
--- a/panel/panel-preferences-dialog.c
+++ b/panel/panel-preferences-dialog.c
@@ -146,9 +146,6 @@ panel_preferences_dialog_init (PanelPreferencesDialog *dialog)
dialog->bindings = NULL;
dialog->application = panel_application_get ();
- /* block all autohides */
- panel_application_windows_autohide (dialog->application, TRUE);
-
/* load the builder data into the object */
gtk_builder_add_from_string (GTK_BUILDER (dialog), panel_preferences_dialog_ui,
panel_preferences_dialog_ui_length, NULL);
@@ -243,9 +240,6 @@ panel_preferences_dialog_finalize (GObject *object)
dialog->items_changed_handler_id);
}
- /* thaw all autohide blocks */
- panel_application_windows_autohide (dialog->application, FALSE);
-
/* deselect all windows */
if (!panel_item_dialog_visible ())
panel_application_window_select (dialog->application, NULL);
diff --git a/panel/panel-window.c b/panel/panel-window.c
index 7d6eab2..fd21884 100644
--- a/panel/panel-window.c
+++ b/panel/panel-window.c
@@ -2171,9 +2171,11 @@ panel_window_update_plugins (PanelWindow *window,
}
itembar = gtk_bin_get_child (GTK_BIN (window));
- panel_return_if_fail (GTK_IS_CONTAINER (itembar));
if (G_LIKELY (itembar != NULL))
- gtk_container_foreach (GTK_CONTAINER (itembar), func, window);
+ {
+ panel_return_if_fail (GTK_IS_CONTAINER (itembar));
+ gtk_container_foreach (GTK_CONTAINER (itembar), func, window);
+ }
}
More information about the Xfce4-commits
mailing list