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