From 7df33c208a1e2a81ac8057df3c213c93df762e1a Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 25 Nov 2001 08:32:54 +0000 Subject: [PATCH] ok - some changes to default settings.. alt_right mouse on windows pops up window menu. ctrl+alt+insert execs eterm... it wasnt in the default script to build the dbs' the scritp also had some mdos done to it before by others that sisnt use the environemtn variables that devined numerics for actions.... also now menus can remember much more.. as can e. save and load on demand.. the remember things are menu check items... might have a big arse dialog eventually for this... but for now this is all good :) SVN revision: 5732 --- data/config/behavior/default/actions.db | Bin 114688 -> 122880 bytes data/config/behavior/default/grabs.db | Bin 12288 -> 12288 bytes data/config/behavior/default/settings.db | Bin 12288 -> 12288 bytes data/scripts/build_db.sh | 42 ++- src/bordermenu.c | 339 ++++++++++++++++++++++- src/match.c | 56 +++- src/menu.c | 26 +- src/menu.h | 6 + 8 files changed, 449 insertions(+), 20 deletions(-) diff --git a/data/config/behavior/default/actions.db b/data/config/behavior/default/actions.db index 851edc4cc0582e5f569a690ac646ea86221f99ee..934df41f1b1036ac93cf7d10a3d39c53092ed148 100644 GIT binary patch delta 3312 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 delta 2830 zcmZuzdsNhQ7N0Mmh;#4#4kC=H%#bgnm>FIokC_21G!@YG)vAD!j!N_x|L?*E}9Q;%bq@W+f|FShqbvTSh}s2!QL6A_3YU>=Qn50%pY^_=Xq;d zf@^Am8=^u(4F-diAIZ;9ej+x+*GX}B2!G^PU~u|Z=PJDSHaMl~VIna=nN6WMr$dT4MRhRVSTBwZt+&6sfJ2St>Knl_f2x`a6c#g+7f`{-AxC1v~1FpbDScC;Q3P<4m z7>za@jA1D87W@qVfUn@Ma10JW6YPNB!v=U79)mKN226a#KNjdVQ>`9swyroTj+>SbNVR`?Q9mY|L3Pa*%P(JE_!+YZI2YyIfimD1YDKh$iK#b?5;$0%FPkQ=Ek*5y!Cw0y3)aVcqDlNmU{`m{(rjufjdNRYVKRqc1s{{R|+MDr+s8{C9 zi4%!J=tukkTk#CG;6dDp+fiXX3+-{7hqG}aFOkk-i^d@sj-l8AH{ome0zQIwVK=O(~J;K#oZ_=Lw@ehXQ?*2E?c6 zJvJURBzK8gy%K^F9G=DMQ0_fybt|YZb2D_L6r{hnAguZ!DWr1bh3Xu)Fsbo*7E!6n z^Xm0Mn=pDq#u-J>B*S1(ea26k+>cl4MnB*;_!m5Z2k#~lLLR1_X*mn0;2_iTGK;pJiCN0T%z){T4Ve%FgPE4uMwQWOQmOgnOvldr29c!F z3ihbQu@UO00&7sNr)-fos_?o9e9&-MnP(Ohyo-OtJ@`Cs#WnZ@R>;XP<(Jh#JUXn+;4jPcBeF))%<5d&rj0|Q($UNC-Y{J{8*agXtJ z@9CMJ^i;0aP<_EBGB#RG3QESP$g(6o+RhkXW?V$Pj<<-29`Px+z2$8w2@ydLmM!|-aGcd=nOqox)3bxZ`-f1Q8RLCHY;*Ao>&H)?AF!x}kUctY!R$ExB zJMbmkfOUSQ7V=Ib(9PT2k9{!$yWvfLyq>xvluaD2EEJ#J-uI=cNmaLo2pgN{88O^D z@UtADF4-k}#fAls~N0cTR>d_F;Ccls;sw^s9D29t)izhKr#dk)iqraq!1SLA!)EsBH>egA)eS&9U@nas< z&{@lrR%|v4SHTvRXbrojn5NJK%Hm4!6+$@mrabzW!~%7&wYQE# zvHz|hO|K>`NzCvisD6w@H0Q0}P2yo?br_pMr3e&3u?8dQJ|@xMT_y|UR5_aKE?FkX z{?g2t-l9u%kxtPu+E079>>BwjspZ3@gzYzuTzr^B^F1KRNPA88^h}JN%NgVufwOX0!wf@gX+Rm zE~r6h;!wTC7482nKGO9_n>c$rL_>5M*X!K@8rl`0 zWrCGZRa9A}*V)DI)M`gBJ-{Kxas`Cz#~q?E$Z1GJ-6u{sU0s%6#&=Z_<*`C+tPnGw z44wEhetV~!_OU{qV{<*lZClKT-DF~-)-fcqh+<8^{w=S_!B;i!dpY^~qc&eMdetCFF^XMPiUXx?B7v=>{1BzL!_!=dx8E zlSk!V`35`edHFPZY%w1{K0Q1no$Rq8vbU71h8xWDF7olLPS}R~4y+<9{V!q(ak|AW Ldc*&oX-WS9Jnvg9 diff --git a/data/config/behavior/default/grabs.db b/data/config/behavior/default/grabs.db index c2f40453c5f7cd5026458ac7b60ddf94fc324966..b2e4a54fc20e12e13c3e1ed1133496e46e868682 100644 GIT binary patch delta 32 kcmZojXh@i_m!J7xFasEH2-z^KzP8y=!G?b`hrkbc0HOp5c>n+a delta 32 kcmZojXh@i_m!I)3KLZ#rvs*vDS+Utr!G?b`hrkbc0Hi<()Bpeg diff --git a/data/config/behavior/default/settings.db b/data/config/behavior/default/settings.db index efbfb7aafaec0f14dde3436a32c889a96cc01c0c..e767726069158e1ad17b0b7f614a31450d4a10e8 100644 GIT binary patch delta 40 tcmZojXh@i_m!J7x5Ca%+2-z^KzP9nAIse1}*3BFOmhy}Ylb!VU0Ra5g3)=ty delta 40 tcmZojXh@i_m!I)37XuhDvs*vDS-$b2Ise1}*3BFOmhy~Dlb!VU0RRDX3^M=# diff --git a/data/scripts/build_db.sh b/data/scripts/build_db.sh index 54106fb07..53e464019 100755 --- a/data/scripts/build_db.sh +++ b/data/scripts/build_db.sh @@ -105,6 +105,14 @@ edb_ed $DB add "/actions/"$NUM"/button" int 2 edb_ed $DB add "/actions/"$NUM"/key" str "" edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_ALT NUM=$[ $NUM + 1 ]; +edb_ed $DB add "/actions/"$NUM"/name" str "Window_Grab" +edb_ed $DB add "/actions/"$NUM"/action" str "Menu" +edb_ed $DB add "/actions/"$NUM"/params" str "" +edb_ed $DB add "/actions/"$NUM"/event" int $ACT_MOUSE_CLICK +edb_ed $DB add "/actions/"$NUM"/button" int 3 +edb_ed $DB add "/actions/"$NUM"/key" str "" +edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_ALT +NUM=$[ $NUM + 1 ]; edb_ed $DB add "/actions/"$NUM"/name" str "Resize" edb_ed $DB add "/actions/"$NUM"/action" str "Window_Move" edb_ed $DB add "/actions/"$NUM"/params" str "" @@ -305,21 +313,29 @@ edb_ed $DB add "/actions/"$NUM"/button" int 0 edb_ed $DB add "/actions/"$NUM"/key" str "F8" edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_ALT NUM=$[ $NUM + 1 ]; -edb_ed $DB add "/actions/"$NUM"/name" str Key_Binding -edb_ed $DB add "/actions/"$NUM"/action" str Desktop_Relative -edb_ed $DB add "/actions/"$NUM"/params" str 1 -edb_ed $DB add "/actions/"$NUM"/event" int 8 +edb_ed $DB add "/actions/"$NUM"/name" str "Key_Binding" +edb_ed $DB add "/actions/"$NUM"/action" str "Desktop_Relative" +edb_ed $DB add "/actions/"$NUM"/params" str "1" +edb_ed $DB add "/actions/"$NUM"/event" int $ACT_KEY_DOWN edb_ed $DB add "/actions/"$NUM"/button" int 0 -edb_ed $DB add "/actions/"$NUM"/key" str Right -edb_ed $DB add "/actions/"$NUM"/modifiers" int 6 +edb_ed $DB add "/actions/"$NUM"/key" str "Right" +edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_CTRL_ALT NUM=$[ $NUM + 1 ]; -edb_ed $DB add "/actions/"$NUM"/name" str Key_Binding -edb_ed $DB add "/actions/"$NUM"/action" str Desktop_Relative -edb_ed $DB add "/actions/"$NUM"/params" str -1 -edb_ed $DB add "/actions/"$NUM"/event" int 8 +edb_ed $DB add "/actions/"$NUM"/name" str "Key_Binding" +edb_ed $DB add "/actions/"$NUM"/action" str "Desktop_Relative" +edb_ed $DB add "/actions/"$NUM"/params" str "-1" +edb_ed $DB add "/actions/"$NUM"/event" int $ACT_KEY_DOWN edb_ed $DB add "/actions/"$NUM"/button" int 0 -edb_ed $DB add "/actions/"$NUM"/key" str Left -edb_ed $DB add "/actions/"$NUM"/modifiers" int 6 +edb_ed $DB add "/actions/"$NUM"/key" str "Left" +edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_CTRL_ALT +NUM=$[ $NUM + 1 ]; +edb_ed $DB add "/actions/"$NUM"/name" str "Key_Binding" +edb_ed $DB add "/actions/"$NUM"/action" str "Execute" +edb_ed $DB add "/actions/"$NUM"/params" str "Eterm" +edb_ed $DB add "/actions/"$NUM"/event" int $ACT_KEY_DOWN +edb_ed $DB add "/actions/"$NUM"/button" int 0 +edb_ed $DB add "/actions/"$NUM"/key" str "Insert" +edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_CTRL_ALT NUM=$[ $NUM + 1 ]; edb_ed $DB add "/actions/count" int $NUM @@ -333,7 +349,7 @@ edb_ed $DB add "/menu/scroll/resist" int 5 edb_ed $DB add "/menu/scroll/speed" int 12 edb_ed $DB add "/window/raise/auto" int 0 edb_ed $DB add "/window/raise/delay" float 0.5 -edb_ed $DB add "/window/move/mode" int $WINDOW_MODE_BOX +edb_ed $DB add "/window/move/mode" int $WINDOW_MODE_OPAQUE edb_ed $DB add "/window/resize/mode" int $WINDOW_MODE_BOX edb_ed $DB add "/guides/display/x" float 0.5 edb_ed $DB add "/guides/display/y" float 0.5 diff --git a/src/bordermenu.c b/src/bordermenu.c index cc8357672..51a5fa923 100644 --- a/src/bordermenu.c +++ b/src/bordermenu.c @@ -3,10 +3,23 @@ #include "desktops.h" #include "debug.h" #include "util.h" +#include "icccm.h" #include "bordermenu.h" static void e_bordermenu_cb_close(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_kill(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_raise(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_lower(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_sticky(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_iconify(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_max(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_zoom(E_Menu *m, E_Menu_Item *mi, void *data); static void e_bordermenu_cb_remember_location(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_remember_size(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_remember_desktop(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_remember_sticky(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_remember_prog_location_ignore(E_Menu *m, E_Menu_Item *mi, void *data); +static void e_bordermenu_cb_menu_hide(E_Menu *m, void *data); static void e_bordermenu_cb_close(E_Menu *m, E_Menu_Item *mi, void *data) @@ -24,6 +37,160 @@ e_bordermenu_cb_close(E_Menu *m, E_Menu_Item *mi, void *data) UN(mi); } +static void +e_bordermenu_cb_kill(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + if (b->win.client) ecore_window_kill_client(b->win.client); + + D_RETURN; + UN(m); + UN(mi); +} + +static void +e_bordermenu_cb_raise(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + e_border_raise(b); + + D_RETURN; + UN(m); + UN(mi); +} + +static void +e_bordermenu_cb_lower(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + e_border_lower(b); + + D_RETURN; + UN(m); + UN(mi); +} + +static void +e_bordermenu_cb_sticky(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + if (mi->on) e_menu_item_set_state(mi, 0); + else e_menu_item_set_state(mi, 1); + e_menu_set_state(m, mi); + + b->client.sticky = mi->on; + b->changed = 1; + + D_RETURN; + UN(m); + UN(mi); +} + +static void +e_bordermenu_cb_iconify(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + D_RETURN; + UN(m); + UN(mi); +} + +static void +e_bordermenu_cb_max(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + if (b->client.is_desktop) D_RETURN; + if (b->current.shaded > 0) D_RETURN; + if ((b->mode.move) || (b->mode.resize)) D_RETURN; + b->mode.move = 0; + b->mode.resize = 0; + + if (mi->on) e_menu_item_set_state(mi, 0); + else e_menu_item_set_state(mi, 1); + e_menu_set_state(m, mi); + + if (mi->on) + { + b->max.x = b->current.x; + b->max.y = b->current.y; + b->max.w = b->current.w; + b->max.h = b->current.h; + b->current.requested.x = 0; + b->current.requested.y = 0; + b->current.requested.w = b->desk->real.w; + b->current.requested.h = b->desk->real.h; + b->changed = 1; + b->max.is = mi->on; + e_border_adjust_limits(b); + b->current.requested.x = b->current.x; + b->current.requested.y = b->current.y; + b->current.requested.w = b->current.w; + b->current.requested.h = b->current.h; + } + else + { + b->current.requested.x = b->max.x; + b->current.requested.y = b->max.y; + b->current.requested.w = b->max.w; + b->current.requested.h = b->max.h; + b->changed = 1; + b->max.is = mi->on; + e_border_adjust_limits(b); + b->current.requested.x = b->current.x; + b->current.requested.y = b->current.y; + b->current.requested.w = b->current.w; + b->current.requested.h = b->current.h; + } + + D_RETURN; + UN(m); + UN(mi); +} + +static void +e_bordermenu_cb_zoom(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + D_RETURN; + UN(m); + UN(mi); +} + static void e_bordermenu_cb_remember_location(E_Menu *m, E_Menu_Item *mi, void *data) { @@ -44,6 +211,107 @@ e_bordermenu_cb_remember_location(E_Menu *m, E_Menu_Item *mi, void *data) UN(m); } +static void +e_bordermenu_cb_remember_size(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + if (mi->on) e_menu_item_set_state(mi, 0); + else e_menu_item_set_state(mi, 1); + e_menu_set_state(m, mi); + + b->client.matched.matched = 1; + b->client.matched.size.matched = mi->on; + + D_RETURN; + UN(m); +} + +static void +e_bordermenu_cb_remember_desktop(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + if (mi->on) e_menu_item_set_state(mi, 0); + else e_menu_item_set_state(mi, 1); + e_menu_set_state(m, mi); + + b->client.matched.matched = 1; + b->client.matched.desktop.matched = mi->on; + + D_RETURN; + UN(m); +} + +static void +e_bordermenu_cb_remember_sticky(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + if (mi->on) e_menu_item_set_state(mi, 0); + else e_menu_item_set_state(mi, 1); + e_menu_set_state(m, mi); + + b->client.matched.matched = 1; + b->client.matched.sticky.matched = mi->on; + + D_RETURN; + UN(m); +} + +static void +e_bordermenu_cb_remember_prog_location_ignore(E_Menu *m, E_Menu_Item *mi, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + if (mi->on) e_menu_item_set_state(mi, 0); + else e_menu_item_set_state(mi, 1); + e_menu_set_state(m, mi); + + b->client.matched.matched = 1; + b->client.matched.prog_location.matched = mi->on; + b->client.matched.prog_location.ignore = 1; + + D_RETURN; + UN(m); +} + +static void +e_bordermenu_cb_menu_hide(E_Menu *m, void *data) +{ + E_Border *b; + + D_ENTER; + + b = data; + + while (b->menus) + { + m = b->menus->data; + m->delete_me = 1; + b->menus = evas_list_remove(b->menus, m); + } + + D_RETURN; + UN(m); +} + void e_bordermenu_do(E_Border *b) { @@ -51,12 +319,14 @@ e_bordermenu_do(E_Border *b) E_Menu_Item *menuitem; D_ENTER; + if (!b->menus) { menu = e_menu_new(); b->menus = evas_list_append(b->menus, menu); e_menu_set_padding_icon(menu, 2); e_menu_set_padding_state(menu, 2); + e_menu_hide_callback(menu, e_bordermenu_cb_menu_hide, b); menuitem = e_menu_item_new("Close"); /* e_menu_item_set_icon(menuitem, icon); */ @@ -64,20 +334,81 @@ e_bordermenu_do(E_Border *b) /* e_menu_item_set_separator(menuitem, 1);*/ e_menu_item_set_callback(menuitem, e_bordermenu_cb_close, b); e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new("Raise"); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_raise, b); + e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new("Lower"); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_lower, b); + e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new("Iconify"); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_iconify, b); + e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new("Zoom"); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_zoom, b); + e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new("Maximise"); + e_menu_item_set_check(menuitem, 1); + e_menu_item_set_state(menuitem, b->max.is); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_max, b); + e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new("Sticky"); + e_menu_item_set_check(menuitem, 1); + e_menu_item_set_state(menuitem, b->client.sticky); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_sticky, b); + e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new(""); + e_menu_item_set_separator(menuitem, 1); + e_menu_add_item(menu, menuitem); + + menuitem = e_menu_item_new("Kill"); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_kill, b); + e_menu_add_item(menu, menuitem); menuitem = e_menu_item_new(""); e_menu_item_set_separator(menuitem, 1); - e_menu_item_set_check(menuitem, 1); - e_menu_item_set_state(menuitem, b->client.matched.location.matched); - e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_location, b); e_menu_add_item(menu, menuitem); menuitem = e_menu_item_new("Remember Location"); e_menu_item_set_check(menuitem, 1); - e_menu_item_set_state(menuitem, b->client.matched.location.matched); + e_menu_item_set_state(menuitem, b->client.matched.location.matched); e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_location, b); e_menu_add_item(menu, menuitem); e_menu_set_state(menu, menuitem); + + menuitem = e_menu_item_new("Remember Size"); + e_menu_item_set_check(menuitem, 1); + e_menu_item_set_state(menuitem, b->client.matched.size.matched); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_size, b); + e_menu_add_item(menu, menuitem); + e_menu_set_state(menu, menuitem); + + menuitem = e_menu_item_new("Remember Desktop"); + e_menu_item_set_check(menuitem, 1); + e_menu_item_set_state(menuitem, b->client.matched.desktop.matched); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_desktop, b); + e_menu_add_item(menu, menuitem); + e_menu_set_state(menu, menuitem); + + menuitem = e_menu_item_new("Remember Stickiness"); + e_menu_item_set_check(menuitem, 1); + e_menu_item_set_state(menuitem, b->client.matched.sticky.matched); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_sticky, b); + e_menu_add_item(menu, menuitem); + e_menu_set_state(menu, menuitem); + + menuitem = e_menu_item_new("Ignore Program Specified Position"); + e_menu_item_set_check(menuitem, 1); + e_menu_item_set_state(menuitem, b->client.matched.prog_location.matched); + e_menu_item_set_callback(menuitem, e_bordermenu_cb_remember_prog_location_ignore, b); + e_menu_add_item(menu, menuitem); + e_menu_set_state(menu, menuitem); } { diff --git a/src/match.c b/src/match.c index 4cf2d0419..d2942f77e 100644 --- a/src/match.c +++ b/src/match.c @@ -103,6 +103,8 @@ e_match_save_props(E_Border *b) D_ENTER; + if ((!b->client.name) || (!b->client.class)) D_RETURN; + db = e_db_open(e_config_get("match")); if (!db) D_RETURN; @@ -111,7 +113,6 @@ e_match_save_props(E_Border *b) if (b->client.matched.location.matched) { - printf("write location %i %i\n", b->current.x, b->current.y); b->client.matched.location.x = b->current.x; b->client.matched.location.y = b->current.y; sprintf(buf, "match/%s/%s/location/x", b->client.name, b->client.class); @@ -126,6 +127,59 @@ e_match_save_props(E_Border *b) sprintf(buf, "match/%s/%s/location/y", b->client.name, b->client.class); e_db_data_del(db, buf); } + + if (b->client.matched.size.matched) + { + b->client.matched.size.w = b->client.w; + b->client.matched.size.h = b->client.h; + sprintf(buf, "match/%s/%s/size/w", b->client.name, b->client.class); + e_db_int_set(db, buf, b->client.matched.size.w); + sprintf(buf, "match/%s/%s/size/h", b->client.name, b->client.class); + e_db_int_set(db, buf, b->client.matched.size.h); + } + else + { + sprintf(buf, "match/%s/%s/size/w", b->client.name, b->client.class); + e_db_data_del(db, buf); + sprintf(buf, "match/%s/%s/size/h", b->client.name, b->client.class); + e_db_data_del(db, buf); + } + + if (b->client.matched.desktop.matched) + { + b->client.matched.desktop.desk = b->client.desk; + sprintf(buf, "match/%s/%s/desktop/desk", b->client.name, b->client.class); + e_db_int_set(db, buf, b->client.matched.desktop.desk); + } + else + { + sprintf(buf, "match/%s/%s/desktop/desk", b->client.name, b->client.class); + e_db_data_del(db, buf); + } + + if (b->client.matched.sticky.matched) + { + b->client.matched.sticky.sticky = b->client.sticky; + sprintf(buf, "match/%s/%s/sticky/sticky", b->client.name, b->client.class); + e_db_int_set(db, buf, b->client.matched.sticky.sticky); + } + else + { + sprintf(buf, "match/%s/%s/sticky/sticky", b->client.name, b->client.class); + e_db_data_del(db, buf); + } + + if (b->client.matched.prog_location.matched) + { + sprintf(buf, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class); + e_db_int_set(db, buf, b->client.matched.prog_location.ignore); + } + else + { + sprintf(buf, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class); + e_db_data_del(db, buf); + } + e_db_close(db); e_db_flush(); D_RETURN; diff --git a/src/menu.c b/src/menu.c index 1a8a28fab..f75fb4286 100644 --- a/src/menu.c +++ b/src/menu.c @@ -176,6 +176,19 @@ e_idle(void *data) if (m->first_expose) evas_render(m->evas); } + again: + for (l = menus; l; l = l->next) + { + E_Menu *m; + + m = l->data; + if (m->delete_me) + { + e_object_unref(E_OBJECT(m)); + goto again; + } + } + e_db_flush(); D_RETURN; @@ -664,6 +677,13 @@ e_menu_callback_item(E_Menu *m, E_Menu_Item *mi) D_RETURN; } +void +e_menu_hide_callback(E_Menu *m, void (*func) (E_Menu *m, void *data), void *data) +{ + m->func_hide = func; + m->func_hide_data = data; +} + void e_menu_item_set_callback(E_Menu_Item *mi, void (*func) (E_Menu *m, E_Menu_Item *mi, void *data), void *data) { @@ -1703,11 +1723,11 @@ void e_menu_update_finish(E_Menu *m) { D_ENTER; - + if (!m->changed) D_RETURN; m->previous = m->current; m->changed = 0; - + D_RETURN; } @@ -1767,6 +1787,8 @@ e_menu_update_hides(E_Menu *m) open_menus = evas_list_remove(open_menus, m); ecore_window_hide(m->win.main); if (!open_menus) e_menu_event_win_hide(); + if (m->func_hide) + m->func_hide(m, m->func_hide_data); } } diff --git a/src/menu.h b/src/menu.h index 44d7eff98..66c5f0e58 100644 --- a/src/menu.h +++ b/src/menu.h @@ -32,6 +32,8 @@ struct _E_Menu int redo_sel; int changed; + int delete_me; + struct { int state, icon, text; } size; @@ -42,6 +44,9 @@ struct _E_Menu E_Menu_Item *selected; Time time; + + void (*func_hide) (E_Menu *m, void *data); + void *func_hide_data; }; struct _E_Menu_Item @@ -97,6 +102,7 @@ void e_menu_init(void ); void e_menu_callback_item(E_Menu *m, E_Menu_Item *mi); void e_menu_item_set_callback(E_Menu_Item *mi, void (*func) (E_Menu *m, E_Menu_Item *mi, void *data), void *data); +void e_menu_hide_callback(E_Menu *m, void (*func) (E_Menu *m, void *data), void *data); void e_menu_hide_submenus(E_Menu *menus_after); void e_menu_select(int dx, int dy); void e_menu_event_win_show(void );