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

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.
> 
> 
> ------------------------------------------------------------------------
> 
> 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    24 Feb 2007 16:09:01 -0000
> @@ -611,6 +611,48 @@
>         bd->borderless = 0;
>       else
>         bd->borderless = 1;
> +     if (!bd->borderless)
> +       bd->pinned_to_desktop = 0;
> +
> +     bd->client.border.changed = 1;
> +     bd->changed = 1;
> +     }
> +}
> +
> +/***************************************************************************/
> +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;
> +     if (bd->pinned_to_desktop)
> +       bd->pinned_to_desktop = 0;
> +     else
> +       bd->pinned_to_desktop = 1;
> +     bd->borderless = bd->pinned_to_desktop; 
> +     bd->user_skip_winlist = bd->pinned_to_desktop;
> +        if (bd->pinned_to_desktop)
> +       {
> +          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_NONE); 
> +            }
> +       }
> +     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;
> @@ -1949,7 +1991,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     24 Feb 2007 16:09:05 -0000
> @@ -5456,7 +5456,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 +5466,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 +5519,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 +5567,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_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    24 Feb 2007 16:09:07 -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);
>  }
>  
> 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        24 Feb 2007 16:09:07 
> -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   24 Feb 2007 16:09:07 -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


-------------------------------------------------------------------------
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