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?
Yep... your right. I assume you are referring to the code in the action, _e_border_menu_cb_pin, and _e_border_menu_cb_unpin. Maybe another new func to set the pinned state (e_border_pinned_set() maybe)... and this would be called accordingly from all of the above. Thus providing one copy of the code. That sound reasonable? Thanks. > > 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 >> enlightenment-devel@lists.sourceforge.net >> 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 > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > -- Regards, Eric ------------------------------------------------------------------------- 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 enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel