Author: olivier
Date: 2007-03-13 21:39:35 +0000 (Tue, 13 Mar 2007)
New Revision: 25159

Modified:
   xfwm4/trunk/mcs-plugin/xfwm4_plugin.c
   xfwm4/trunk/src/client.c
   xfwm4/trunk/src/settings.c
Log:
Make the title button in the xfwm4 settings manager dragable, patch from Peter 
de Ridder <[EMAIL PROTECTED]>, bug #3000)

Modified: xfwm4/trunk/mcs-plugin/xfwm4_plugin.c
===================================================================
--- xfwm4/trunk/mcs-plugin/xfwm4_plugin.c       2007-03-13 21:13:35 UTC (rev 
25158)
+++ xfwm4/trunk/mcs-plugin/xfwm4_plugin.c       2007-03-13 21:39:35 UTC (rev 
25159)
@@ -72,6 +72,7 @@
     {"M", N_("Maximize"), "gtk-zoom-100"},
     {"C", N_("Close"), "gtk-close"}
 };
+#define BUTTON_COUNT 6
 
 
 static const MenuTmpl dbl_click_values[] = {
@@ -333,6 +334,14 @@
         0);
 }
 
+static void
+title_data_get (GtkWidget * widget, GdkDragContext * drag_context, 
GtkSelectionData * data, guint info,
+    guint time, gpointer user_data)
+{
+    gtk_selection_data_set (data, gdk_atom_intern ("_XFWM4_TITLE", FALSE), 8, 
(const guchar *) "",
+        0);
+}
+
 static gchar *
 layout_get_semantic (GtkWidget * container)
 {
@@ -341,7 +350,7 @@
     gint p = 0;
 
     children = gtk_container_get_children (GTK_CONTAINER (container));
-    sem = g_new0 (gchar, 8);
+    sem = g_new0 (gchar, BUTTON_COUNT + 2);
     item = children;
     while (item)
     {
@@ -353,7 +362,7 @@
         if (key)
         {
             sem[p++] = *key;
-            if (p >= 7)
+            if (p >= BUTTON_COUNT + 1)
             {
                 g_list_free (children);
                 return (sem);
@@ -560,14 +569,18 @@
     GtkWidget *hidden_box;
     GtkWidget *title;
     GtkWidget *label;
-    GtkTargetEntry entry;
+    GtkTargetEntry entry[2];
     GtkTooltips *tooltips;
     gint i;
 
-    entry.target = "_XFWM4_BUTTON";
-    entry.flags = GTK_TARGET_SAME_APP;
-    entry.info = 2;
+    entry[0].target = "_XFWM4_BUTTON";
+    entry[0].flags = GTK_TARGET_SAME_APP;
+    entry[0].info = 2;
 
+    entry[1].target = "_XFWM4_TITLE";
+    entry[1].flags = GTK_TARGET_SAME_APP;
+    entry[1].info = 3;
+
     tooltips = gtk_tooltips_new ();
 
     vbox = gtk_vbox_new (TRUE, 0);
@@ -591,6 +604,10 @@
     title = gtk_button_new_with_label (_("Title"));
     gtk_tooltips_set_tip (tooltips, title, _("The window title, it cannot be 
removed"), NULL);
     g_object_set_data (G_OBJECT (title), "key_char", "|");
+    gtk_drag_source_set (title, GDK_BUTTON1_MASK, &entry[1], 1, 
GDK_ACTION_MOVE);
+    g_signal_connect (title, "drag-data-get", G_CALLBACK (title_data_get), 
NULL);
+    g_signal_connect (title, "drag_begin", G_CALLBACK (button_drag_begin), 
NULL);
+    g_signal_connect (title, "drag_end", G_CALLBACK (button_drag_end), NULL);
     g_signal_connect (title, "button_press_event", G_CALLBACK 
(signal_blocker), NULL);
     g_signal_connect (title, "enter_notify_event", G_CALLBACK 
(signal_blocker), NULL);
     g_signal_connect (title, "focus", G_CALLBACK (signal_blocker), NULL);
@@ -607,7 +624,7 @@
     g_object_set_data (G_OBJECT (hidden_box), "mcs", user_data);
     gtk_widget_show (hidden_box);
 
-    for (i = 0; i < 6; i++)
+    for (i = 0; i < BUTTON_COUNT; i++)
     {
         GtkWidget *button;
         GtkWidget *image;
@@ -616,7 +633,7 @@
         button = gtk_button_new ();
         gtk_container_add (GTK_CONTAINER (button), image);
         gtk_tooltips_set_tip (tooltips, button, _(title_button[i].desc), 
_(title_button[i].desc));
-        gtk_drag_source_set (button, GDK_BUTTON1_MASK, &entry, 1, 
GDK_ACTION_MOVE);
+        gtk_drag_source_set (button, GDK_BUTTON1_MASK, entry, 1, 
GDK_ACTION_MOVE);
         g_signal_connect (button, "drag-data-get", G_CALLBACK (data_get), 
NULL);
         g_signal_connect (button, "drag_begin", G_CALLBACK 
(button_drag_begin), NULL);
         g_signal_connect (button, "drag_end", G_CALLBACK (button_drag_end), 
NULL);
@@ -629,8 +646,8 @@
     }
 
     layout_set_value (layout_box, hidden_box, layout);
-    gtk_drag_dest_set (hidden_frame, GTK_DEST_DEFAULT_ALL, &entry, 1, 
GDK_ACTION_MOVE);
-    gtk_drag_dest_set (layout_frame, GTK_DEST_DEFAULT_ALL, &entry, 1, 
GDK_ACTION_MOVE);
+    gtk_drag_dest_set (hidden_frame, GTK_DEST_DEFAULT_ALL, entry, 1, 
GDK_ACTION_MOVE);
+    gtk_drag_dest_set (layout_frame, GTK_DEST_DEFAULT_ALL, entry, 2, 
GDK_ACTION_MOVE);
 
     g_signal_connect (hidden_frame, "drag_data_received", G_CALLBACK 
(hidden_data_receive),
         hidden_box);

Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c    2007-03-13 21:13:35 UTC (rev 25158)
+++ xfwm4/trunk/src/client.c    2007-03-13 21:39:35 UTC (rev 25159)
@@ -1469,7 +1469,7 @@
     }
     if (FLAG_TEST (c->flags, CLIENT_FLAG_SHADED))
     {
-        TRACE ("Applying client's initial state: sticky");
+        TRACE ("Applying client's initial state: shaded");
         clientShade (c);
     }
 }

Modified: xfwm4/trunk/src/settings.c
===================================================================
--- xfwm4/trunk/src/settings.c  2007-03-13 21:13:35 UTC (rev 25158)
+++ xfwm4/trunk/src/settings.c  2007-03-13 21:39:35 UTC (rev 25159)
@@ -1178,7 +1178,7 @@
     screen_info->params->title_shadow[ACTIVE] = getTitleShadow (rc, 
"title_shadow_active");
     screen_info->params->title_shadow[INACTIVE] = getTitleShadow (rc, 
"title_shadow_inactive");
 
-    strncpy (screen_info->params->button_layout, getValue ("button_layout", 
rc), 7);
+    strncpy (screen_info->params->button_layout, getValue ("button_layout", 
rc), BUTTON_COUNT + 1);
     screen_info->params->button_spacing = TOINT (getValue ("button_spacing", 
rc));
     screen_info->params->button_offset = TOINT (getValue ("button_offset", 
rc));
     screen_info->params->maximized_offset = TOINT (getValue 
("maximized_offset", rc));

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

Reply via email to