On 02/24/2007 17:27, Sebastian Dransfeld wrote:
If pinned is actually just a combination of three other states, why not just make an action which triggers these states and not add a lot of duplicate code?

Sebastian

[Sorry if this double posts.  Sent originally from wrong e-mail address]

Attached is a modified patch which addresses Sebastian's concerns (I hope).

Thanks for pointing it out. :)


Ravenlock wrote:
Hello,

Attached is a patch which will allow a user to have borders remember their pinned state. Additionally, an action has been added to the keybindings that allows a user to toggle this state via the keyboard.






--
Regards,
Ravenlock
Index: e17/apps/e/src/bin/e_actions.c
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_actions.c,v
retrieving revision 1.90
diff -u -r1.90 e_actions.c
--- e17/apps/e/src/bin/e_actions.c      10 Feb 2007 17:23:05 -0000      1.90
+++ e17/apps/e/src/bin/e_actions.c      25 Feb 2007 05:53:19 -0000
@@ -611,6 +611,8 @@
          bd->borderless = 0;
        else
          bd->borderless = 1;
+       if (!bd->borderless)
+         bd->pinned_to_desktop = 0;
 
        bd->client.border.changed = 1;
        bd->changed = 1;
@@ -618,6 +620,22 @@
 }
 
 /***************************************************************************/
+ACT_FN_GO(window_pinned_toggle)
+{
+   if ((!obj) || (obj->type != E_BORDER_TYPE)) obj = 
E_OBJECT(e_border_focused_get());
+   if (!obj) return;
+   if (!((E_Border *)obj)->lock_border)
+     {
+       E_Border *bd;
+
+       bd = (E_Border *)obj;
+
+       bd->pinned_to_desktop = !bd->pinned_to_desktop;
+       e_border_pinned_set(bd, bd->pinned_to_desktop);
+     }
+}
+
+/***************************************************************************/
 ACT_FN_GO(window_move_by)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
@@ -1949,7 +1967,12 @@
    ACT_GO(window_borderless_toggle);
    e_action_predef_name_set(_("Window : State"), _("Toggle Borderless State"),
         "window_borderless_toggle", NULL, NULL, 0);
-   
+  
+   /* window_pinned_toggle */
+   ACT_GO(window_pinned_toggle);
+   e_action_predef_name_set(_("Window : State"), _("Toggle Pinned State"),
+        "window_pinned_toggle", NULL, NULL, 0);
+
    /* desk_flip_by */
    ACT_GO(desk_flip_by);
    e_action_predef_name_set(_("Desktop"), _("Flip Desktop Left"), 
"desk_flip_by", "-1 0", NULL, 0);
Index: e17/apps/e/src/bin/e_border.c
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.571
diff -u -r1.571 e_border.c
--- e17/apps/e/src/bin/e_border.c       14 Feb 2007 02:43:34 -0000      1.571
+++ e17/apps/e/src/bin/e_border.c       25 Feb 2007 05:53:22 -0000
@@ -2239,6 +2239,40 @@
      e_remember_update(bd->remember, bd);
 }
 
+EAPI void
+e_border_pinned_set(E_Border *bd, int set)
+{
+   if (bd)
+     {
+       bd->pinned_to_desktop = set;
+       bd->borderless = set;
+       bd->user_skip_winlist = set;
+
+       if (set)
+         { 
+            bd->client.netwm.state.stacking = E_STACKING_BELOW; 
+            if (bd->layer != 50) 
+              { 
+                 e_border_layer_set(bd, 50); 
+                 e_hints_window_stacking_set(bd, E_STACKING_BELOW); 
+              }
+         }
+       else
+         { 
+            bd->client.netwm.state.stacking = E_STACKING_NONE; 
+            if (bd->layer != 100) 
+              { 
+                 e_border_layer_set(bd, 100); 
+                 e_hints_window_stacking_set(bd, E_STACKING_NONE); 
+              }
+         }
+
+       bd->client.border.changed = 1;
+       bd->changed = 1;
+     }
+}
+
+
 EAPI E_Border *
 e_border_find_by_client_window(Ecore_X_Window win)
 {
@@ -5456,7 +5490,8 @@
                  bd->placed = 1;
                  bd->changes.pos = 1;
               }
-            if (rem->apply & E_REMEMBER_APPLY_LAYER)
+            if (rem->apply & E_REMEMBER_APPLY_LAYER ||
+                rem->apply & E_REMEMBER_APPLY_PIN)
               {
                  bd->layer = rem->prop.layer;
                  if (bd->layer == 100)
@@ -5465,6 +5500,12 @@
                    e_hints_window_stacking_set(bd, E_STACKING_ABOVE);
                  e_container_border_raise(bd);
               }
+            if (rem->apply & E_REMEMBER_APPLY_PIN)
+              { 
+                 bd->pinned_to_desktop = 1; 
+                 bd->borderless = 1;
+                 bd->client.border.changed = 1; 
+              }
             if (rem->apply & E_REMEMBER_APPLY_BORDER)
               {
                  if (rem->prop.border)
@@ -5512,7 +5553,8 @@
                  bd->lock_focus_out = rem->prop.lock_focus_out;
                  bd->lock_life = rem->prop.lock_life;
               }
-            if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST)
+            if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST ||
+                rem->apply & E_REMEMBER_APPLY_PIN)
               bd->user_skip_winlist = rem->prop.skip_winlist;
          }
      }
@@ -5559,6 +5601,9 @@
        else 
          bordername = e_config->theme_default_border_style;
        if (!bordername) bordername = "default";
+fprintf(stderr,"BorderName: %s \n",bordername);
+       if (strcmp("borderless", bordername) != 0)
+         bd->pinned_to_desktop = 0;
 
        if ((!bd->client.border.name) || (strcmp(bd->client.border.name, 
bordername)))
          {
Index: e17/apps/e/src/bin/e_border.h
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.154
diff -u -r1.154 e_border.h
--- e17/apps/e/src/bin/e_border.h       22 Feb 2007 05:17:44 -0000      1.154
+++ e17/apps/e/src/bin/e_border.h       25 Feb 2007 05:53:23 -0000
@@ -594,6 +594,7 @@
 EAPI void      e_border_uniconify(E_Border *bd);
 EAPI void      e_border_stick(E_Border *bd);
 EAPI void      e_border_unstick(E_Border *bd);
+EAPI void      e_border_pinned_set(E_Border *bd, int set);
 
 EAPI E_Border *e_border_find_by_client_window(Ecore_X_Window win);
 EAPI E_Border *e_border_find_by_frame_window(Ecore_X_Window win);
Index: e17/apps/e/src/bin/e_int_border_menu.c
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_int_border_menu.c,v
retrieving revision 1.56
diff -u -r1.56 e_int_border_menu.c
--- e17/apps/e/src/bin/e_int_border_menu.c      22 Feb 2007 05:17:44 -0000      
1.56
+++ e17/apps/e/src/bin/e_int_border_menu.c      25 Feb 2007 05:53:25 -0000
@@ -710,7 +710,8 @@
    if (bd->layer != 150)
      {
        e_border_layer_set(bd, 150);
-       e_hints_window_stacking_set(bd, E_STACKING_ABOVE);
+       e_hints_window_stacking_set(bd, E_STACKING_ABOVE); 
+       bd->pinned_to_desktop = 0;
      }
 }
 
@@ -737,6 +738,7 @@
      {
        e_border_layer_set(bd, 100);
        e_hints_window_stacking_set(bd, E_STACKING_NONE);
+       bd->pinned_to_desktop = 0;
      }
 }
 
@@ -772,6 +774,7 @@
      bd->user_skip_winlist = e_menu_item_toggle_get(mi);
    else
      bd->user_skip_winlist = 0;
+   if (!bd->user_skip_winlist) bd->pinned_to_desktop = 0;
    if (bd->remember) e_remember_update(bd->remember, bd);
 }
 
@@ -827,19 +830,7 @@
    bd = e_object_data_get(E_OBJECT(m));
    if (bd)
      {
-       bd->pinned_to_desktop = 1;
-       bd->borderless = 1;
-       bd->user_skip_winlist = 1;
-       bd->client.netwm.state.stacking = E_STACKING_BELOW;
-
-        if (bd->layer != 50)
-          {
-            e_border_layer_set(bd, 50);
-            e_hints_window_stacking_set(bd, E_STACKING_BELOW);
-          }
-
-       bd->client.border.changed = 1;
-       bd->changed = 1;
+       e_border_pinned_set(bd, 1);
      }
 }
 
@@ -851,19 +842,7 @@
    bd = e_object_data_get(E_OBJECT(m));
    if (bd)
      {
-       bd->pinned_to_desktop = 0;
-       bd->borderless = 0;
-       bd->user_skip_winlist = 0;
-       bd->client.netwm.state.stacking = E_STACKING_NONE;
-
-        if (bd->layer != 100)
-          {
-            e_border_layer_set(bd, 100);
-            e_hints_window_stacking_set(bd, E_STACKING_NONE);
-          }
-
-       bd->client.border.changed = 1;
-       bd->changed = 1;
+       e_border_pinned_set(bd, 0);
      }
 }
 
Index: e17/apps/e/src/bin/e_int_border_remember.c
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_int_border_remember.c,v
retrieving revision 1.14
diff -u -r1.14 e_int_border_remember.c
--- e17/apps/e/src/bin/e_int_border_remember.c  22 Dec 2006 11:21:16 -0000      
1.14
+++ e17/apps/e/src/bin/e_int_border_remember.c  25 Feb 2007 05:53:25 -0000
@@ -43,6 +43,7 @@
       int apply_zone;
       int apply_skip_winlist;
       int apply_run;
+      int apply_pin;
    } remember;
 };
 
@@ -98,6 +99,7 @@
        if (cfdata->border->remember->apply & E_REMEMBER_APPLY_ZONE) 
cfdata->remember.apply_zone = 1;
        if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_WINLIST) 
cfdata->remember.apply_skip_winlist = 1;
        if (cfdata->border->remember->apply & E_REMEMBER_APPLY_RUN) 
cfdata->remember.apply_run = 1;
+       if (cfdata->border->remember->apply & E_REMEMBER_APPLY_PIN) 
cfdata->remember.apply_pin = 1;
      }
    if (!cfdata->border->remember) cfdata->mode = MODE_NOTHING;
    else if ((cfdata->remember.apply_pos) && (cfdata->remember.apply_size) && 
@@ -270,7 +272,7 @@
        else if (cfdata->mode == MODE_GEOMETRY_LOCKS)
          cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | 
E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LOCKS;
        else if (cfdata->mode == MODE_ALL)
-         cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | 
E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER | E_REMEMBER_APPLY_LOCKS | 
E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY | E_REMEMBER_APPLY_DESKTOP | 
E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE | E_REMEMBER_APPLY_SKIP_WINLIST;
+         cfdata->border->remember->apply = E_REMEMBER_APPLY_POS | 
E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER | E_REMEMBER_APPLY_LOCKS | 
E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY | E_REMEMBER_APPLY_DESKTOP | 
E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE | E_REMEMBER_APPLY_SKIP_WINLIST 
| E_REMEMBER_APPLY_PIN;
        cfdata->border->remember->apply_first_only = 0;
        e_remember_update(cfdata->border->remember, cfdata->border);
      }
@@ -289,7 +291,7 @@
         (cfdata->remember.apply_border) || (cfdata->remember.apply_sticky) ||
         (cfdata->remember.apply_desktop) || (cfdata->remember.apply_shade) ||
         (cfdata->remember.apply_zone) || (cfdata->remember.apply_skip_winlist) 
||
-        (cfdata->remember.apply_run)))
+        (cfdata->remember.apply_run) || (cfdata->remember.apply_pin)))
      {
        if (cfdata->border->remember)
          {
@@ -397,6 +399,7 @@
        if (cfdata->remember.apply_zone) cfdata->border->remember->apply |= 
E_REMEMBER_APPLY_ZONE;
        if (cfdata->remember.apply_skip_winlist) 
cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_WINLIST;
        if (cfdata->remember.apply_run) cfdata->border->remember->apply |= 
E_REMEMBER_APPLY_RUN;
+       if (cfdata->remember.apply_pin) cfdata->border->remember->apply |= 
E_REMEMBER_APPLY_PIN;
        cfdata->border->remember->apply_first_only = 
cfdata->remember.apply_first_only;
        e_remember_update(cfdata->border->remember, cfdata->border);
      }
@@ -493,6 +496,8 @@
    e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
    ob = e_widget_check_add(evas, _("Border style"), 
&(cfdata->remember.apply_border));
    e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 1, 1, 1);
+   ob = e_widget_check_add(evas, _("Pinned"), &(cfdata->remember.apply_pin));
+   e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 1, 1, 1);
    ob = e_widget_check_add(evas, _("Stickiness"), 
&(cfdata->remember.apply_sticky));
    e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
    ob = e_widget_check_add(evas, _("Virtual Desktop"), 
&(cfdata->remember.apply_desktop));
Index: e17/apps/e/src/bin/e_remember.h
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_remember.h,v
retrieving revision 1.10
diff -u -r1.10 e_remember.h
--- e17/apps/e/src/bin/e_remember.h     4 Jan 2007 10:30:55 -0000       1.10
+++ e17/apps/e/src/bin/e_remember.h     25 Feb 2007 05:53:25 -0000
@@ -23,6 +23,7 @@
 #define E_REMEMBER_APPLY_ZONE (1 << 8)
 #define E_REMEMBER_APPLY_RUN (1 << 9)
 #define E_REMEMBER_APPLY_SKIP_WINLIST (1 << 10)
+#define E_REMEMBER_APPLY_PIN (1 << 11)
 
 #else
 #ifndef E_REMEMBER_H
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to