[gdl] Consider iconified widget as closed



commit a43a203909a8ba54ac2534b0b811bc047d6f8b86
Author: SÃbastien Granjoux <seb sfo free fr>
Date:   Fri Aug 3 09:59:19 2012 +0200

    Consider iconified widget as closed
    
    It allows to manage the flag GDL_DOCK_ATTACHED in the GtkWidget hide and show
    functions. We don't need to hide a widget without clearing this flag. It means
    that an iconified widget cannot be closed or not, it is always closed so there
    are 3 states for a dock item: normal, iconified, closed (including detached).

 gdl/gdl-dock-bar.c       |    4 ++--
 gdl/gdl-dock-item-grip.c |    2 +-
 gdl/gdl-dock-item.c      |    6 +-----
 gdl/gdl-dock-item.h      |    6 +++---
 gdl/gdl-dock-object.c    |    2 ++
 gdl/gdl-dock.c           |    4 ----
 6 files changed, 9 insertions(+), 15 deletions(-)
---
diff --git a/gdl/gdl-dock-bar.c b/gdl/gdl-dock-bar.c
index 7547b46..cda5758 100644
--- a/gdl/gdl-dock-bar.c
+++ b/gdl/gdl-dock-bar.c
@@ -383,7 +383,7 @@ update_dock_items (GdlDockBar *dockbar, gboolean full_update)
                 gdl_dock_bar_remove_item (dockbar, item);
             else if (g_slist_index (dockbar->priv->items, item) == -1 &&
                 GDL_DOCK_ITEM_ICONIFIED (item) &&
-                !gdl_dock_item_is_closed (item))
+                !gdl_dock_item_is_placeholder (item))
                 gdl_dock_bar_add_item (dockbar, item);
         }
     } else {
@@ -393,7 +393,7 @@ update_dock_items (GdlDockBar *dockbar, gboolean full_update)
             if (g_slist_index (dockbar->priv->items, item) != -1)
                 gdl_dock_bar_remove_item (dockbar, item);
             if (GDL_DOCK_ITEM_ICONIFIED (item) &&
-                !gdl_dock_item_is_closed (item))
+                !gdl_dock_item_is_placeholder (item))
                 gdl_dock_bar_add_item (dockbar, item);
         }
     }
diff --git a/gdl/gdl-dock-item-grip.c b/gdl/gdl-dock-item-grip.c
index 8ea8e36..bba4431 100644
--- a/gdl/gdl-dock-item-grip.c
+++ b/gdl/gdl-dock-item-grip.c
@@ -313,7 +313,7 @@ gdl_dock_item_grip_iconify_clicked (GtkWidget       *widget,
         for (node = items; node != NULL; node = node->next)
         {
             GdlDockItem *item = GDL_DOCK_ITEM (node->data);
-            if (!GDL_DOCK_ITEM_CANT_ICONIFY (item))
+            if (!GDL_DOCK_ITEM_CANT_ICONIFY (item) && !gdl_dock_item_is_closed (item))
                 gdl_dock_item_iconify_item (item);
         }
         g_list_free (items);
diff --git a/gdl/gdl-dock-item.c b/gdl/gdl-dock-item.c
index 779b2e9..52c5c06 100644
--- a/gdl/gdl-dock-item.c
+++ b/gdl/gdl-dock-item.c
@@ -739,10 +739,8 @@ gdl_dock_item_set_property  (GObject      *g_object,
             break;
         case PROP_CLOSED:
             if (g_value_get_boolean (value)) {
-                GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_ATTACHED);
                 gtk_widget_hide (GTK_WIDGET (item));
             } else {
-                GDL_DOCK_OBJECT_SET_FLAGS (item, GDL_DOCK_ATTACHED);
                 if (!GDL_DOCK_ITEM_ICONIFIED (item) && !gdl_dock_item_is_placeholder (item))
                     gtk_widget_show (GTK_WIDGET (item));
 	    }
@@ -2226,13 +2224,12 @@ gdl_dock_item_unbind (GdlDockItem *item)
  * are hidden they are not removed from the layout.
  *
  * The dock item close button causes the panel to be hidden.
- **/
+ */
 void
 gdl_dock_item_hide_item (GdlDockItem *item)
 {
     g_return_if_fail (item != NULL);
 
-    GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_ATTACHED);
     gtk_widget_hide (GTK_WIDGET (item));
     return;
 }
@@ -2293,7 +2290,6 @@ gdl_dock_item_show_item (GdlDockItem *item)
     }
 
     GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_ICONIFIED);
-    GDL_DOCK_OBJECT_SET_FLAGS (item, GDL_DOCK_ATTACHED);
     gtk_widget_show (GTK_WIDGET (item));
 
     return;
diff --git a/gdl/gdl-dock-item.h b/gdl/gdl-dock-item.h
index 6c10c76..ccf3bfb 100644
--- a/gdl/gdl-dock-item.h
+++ b/gdl/gdl-dock-item.h
@@ -301,11 +301,11 @@ void           gdl_dock_item_bind              (GdlDockItem *item,
 
 void           gdl_dock_item_unbind            (GdlDockItem *item);
 
-void           gdl_dock_item_hide_item         (GdlDockItem *item);
+void           gdl_dock_item_hide_item         (GdlDockItem      *item);
 
 void           gdl_dock_item_iconify_item      (GdlDockItem *item);
 
-void           gdl_dock_item_show_item         (GdlDockItem *item);
+void           gdl_dock_item_show_item         (GdlDockItem      *item);
 
 void           gdl_dock_item_lock              (GdlDockItem *item);
 
@@ -321,7 +321,7 @@ gboolean    gdl_dock_item_or_child_has_focus  (GdlDockItem      *item);
 
 gboolean    gdl_dock_item_is_placeholder       (GdlDockItem      *item);
 
-gboolean    gdl_dock_item_is_closed            (GdlDockItem      *item);
+gboolean       gdl_dock_item_is_closed         (GdlDockItem      *item);
 
 G_END_DECLS
 
diff --git a/gdl/gdl-dock-object.c b/gdl/gdl-dock-object.c
index 15f7a6b..d3c2ef8 100644
--- a/gdl/gdl-dock-object.c
+++ b/gdl/gdl-dock-object.c
@@ -419,6 +419,7 @@ gdl_dock_object_foreach_automatic (GdlDockObject *object,
 static void
 gdl_dock_object_show (GtkWidget *widget)
 {
+    GDL_DOCK_OBJECT_SET_FLAGS (widget, GDL_DOCK_ATTACHED);
     GTK_WIDGET_CLASS (gdl_dock_object_parent_class)->show (widget);
 
     /* Update visibility of automatic parents */
@@ -428,6 +429,7 @@ gdl_dock_object_show (GtkWidget *widget)
 static void
 gdl_dock_object_hide (GtkWidget *widget)
 {
+   GDL_DOCK_OBJECT_UNSET_FLAGS (widget, GDL_DOCK_ATTACHED);
    GTK_WIDGET_CLASS (gdl_dock_object_parent_class)->hide (widget);
 
     /* Update visibility of automatic parents */
diff --git a/gdl/gdl-dock.c b/gdl/gdl-dock.c
index 25675ca..6269d8e 100644
--- a/gdl/gdl-dock.c
+++ b/gdl/gdl-dock.c
@@ -398,7 +398,6 @@ gdl_dock_constructor (GType                  type,
                               G_CALLBACK (gdl_dock_floating_window_delete_event_cb),
                               NULL);
         }
-        GDL_DOCK_OBJECT_SET_FLAGS (dock, GDL_DOCK_ATTACHED);
     }
 
     return g_object;
@@ -780,7 +779,6 @@ gdl_dock_remove (GtkContainer *container,
 
     if (GTK_WIDGET (dock->root) == widget) {
         dock->root = NULL;
-        GDL_DOCK_OBJECT_UNSET_FLAGS (widget, GDL_DOCK_ATTACHED);
         gtk_widget_unparent (widget);
 
         if (was_visible && gtk_widget_get_visible (GTK_WIDGET (container)))
@@ -822,7 +820,6 @@ gdl_dock_detach (GdlDockObject *object,
     if (recursive && dock->root) {
         gdl_dock_object_detach (dock->root, recursive);
     }
-    GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_ATTACHED);
 }
 
 static void
@@ -978,7 +975,6 @@ gdl_dock_dock (GdlDockObject    *object,
         GtkWidget *widget = GTK_WIDGET (requestor);
 
         dock->root = requestor;
-        GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED);
         gtk_widget_set_parent (widget, GTK_WIDGET (dock));
 
         gdl_dock_item_show_grip (GDL_DOCK_ITEM (requestor));



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]