Author: jasper
Date: 2007-02-18 12:05:41 +0000 (Sun, 18 Feb 2007)
New Revision: 24989

Modified:
   xfce4-panel/trunk/panel/panel-properties.c
Log:
Unhide when dragging over the panel (bug #2914).

Modified: xfce4-panel/trunk/panel/panel-properties.c
===================================================================
--- xfce4-panel/trunk/panel/panel-properties.c  2007-02-18 08:47:49 UTC (rev 
24988)
+++ xfce4-panel/trunk/panel/panel-properties.c  2007-02-18 12:05:41 UTC (rev 
24989)
@@ -36,6 +36,7 @@
 
 #include "panel-properties.h"
 #include "panel-private.h"
+#include "panel-dnd.h"
 
 #define HIDDEN_SIZE     3
 #define OPAQUE          0xffffffff
@@ -754,6 +755,73 @@
     return FALSE;
 }
 
+static gboolean
+drag_motion (Panel          *panel, 
+             GdkDragContext *context,
+             int             x, 
+             int             y, 
+             guint           time, 
+             gpointer        user_data)
+{
+    PanelPrivate *priv;
+
+    priv = panel->priv;
+
+    if (!priv->hidden || priv->block_autohide)
+        return TRUE;
+
+    if (priv->hide_timeout)
+    {
+        g_source_remove (priv->hide_timeout);
+        priv->hide_timeout = 0;
+    }
+
+    if (!priv->unhide_timeout)
+    {
+        priv->unhide_timeout =
+            g_timeout_add (UNHIDE_TIMEOUT,
+                           (GSourceFunc) _unhide_timeout, panel);
+    }
+
+    return TRUE;
+}
+
+static void
+drag_leave (Panel          *panel,
+            GdkDragContext *drag_context,
+            guint           time,
+            gpointer        user_data)
+{
+    int    x, y, w, h, px, py;
+    PanelPrivate *priv;
+
+    priv = panel->priv;
+
+    if (priv->hidden || priv->block_autohide)
+        return;
+
+    /* check if pointer is inside the window */
+    gdk_display_get_pointer (gdk_display_get_default (), NULL, &px, &py, NULL);
+    gtk_window_get_position (GTK_WINDOW (panel), &x, &y);
+    gtk_window_get_size (GTK_WINDOW (panel), &w, &h);
+
+    if (px < x || px > x + w || py < y || py > y + h)
+    {
+        if (priv->unhide_timeout)
+        {
+            g_source_remove (priv->unhide_timeout);
+            priv->unhide_timeout = 0;
+        }
+
+        if (!priv->hide_timeout)
+        {
+            priv->hide_timeout =
+                g_timeout_add (HIDE_TIMEOUT,
+                               (GSourceFunc) _hide_timeout, panel);
+        }
+    }
+}
+
 static void 
 panel_enter (Panel            *panel, 
              GdkEventCrossing *event)
@@ -867,6 +935,10 @@
     g_signal_connect (panel, "map", G_CALLBACK (_window_mapped), NULL);
     
     g_signal_connect (panel, "move-end", G_CALLBACK (panel_move_end), NULL);
+
+    panel_dnd_set_dest (GTK_WIDGET (panel));
+    g_signal_connect (panel, "drag-motion", G_CALLBACK (drag_motion), NULL);
+    g_signal_connect (panel, "drag-leave", G_CALLBACK (drag_leave), NULL);
 }
 
 void 

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to