[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