forked from enlightenment/enlightenment
A bunch of little changes.
Added basic iconification implementation, including menu for iconified windows, however this is buggy and doesn't work correctly yet, and is therefore commented out. But maybe someone can take the framework and fix it? Added ferite wrapping for timers. SVN revision: 5851
This commit is contained in:
parent
1afbdb13ef
commit
3e09f77dbd
|
@ -19,7 +19,7 @@ if USE_FERITE
|
|||
ferite_c = e_ferite_gen_core.c \
|
||||
e_ferite_gen_header.h \
|
||||
e_ferite_gen_e.c \
|
||||
e_ferite_gen_window.c \
|
||||
e_ferite_gen_Border.c \
|
||||
e_ferite_gen_Epplet.c \
|
||||
e_ferite_gen_Ebits.c \
|
||||
e_ferite_gen_EvasObject.c \
|
||||
|
|
|
@ -1658,11 +1658,16 @@ e_act_iconify_start (E_Object *object, E_Action *a, void *data, int x, int y, in
|
|||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
#if 0
|
||||
b = (E_Border*) object;
|
||||
if (!b) b = e_border_current_focused();
|
||||
if (!b) D_RETURN;
|
||||
if (b->client.is_desktop) D_RETURN;
|
||||
|
||||
D("iconify action start\n");
|
||||
e_border_iconify(b);
|
||||
#endif
|
||||
|
||||
D_RETURN;
|
||||
UN(object);
|
||||
UN(a);
|
||||
|
|
34
src/border.c
34
src/border.c
|
@ -1750,6 +1750,34 @@ e_border_new(void)
|
|||
D_RETURN_(b);
|
||||
}
|
||||
|
||||
void
|
||||
e_border_iconify(E_Border *b)
|
||||
{
|
||||
D_ENTER;
|
||||
D("iconfy window!\n");
|
||||
b->client.iconified = 1;
|
||||
b->current.requested.visible = 0;
|
||||
e_icccm_state_iconified(b->win.client);
|
||||
b->changed = 1;
|
||||
e_border_update(b);
|
||||
D("notify observers of iconification\n");
|
||||
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_WINDOW_ICONIFY);
|
||||
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
e_border_uniconify(E_Border *b)
|
||||
{
|
||||
b->client.iconified = 0;
|
||||
b->current.requested.visible = 1;
|
||||
e_icccm_state_mapped(b->win.client);
|
||||
b->changed = 1;
|
||||
e_border_update(b);
|
||||
/* should be UNICONIFY */
|
||||
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_WINDOW_ICONIFY);
|
||||
}
|
||||
|
||||
void
|
||||
e_border_remove_mouse_grabs(E_Border *b)
|
||||
{
|
||||
|
@ -2861,3 +2889,9 @@ e_border_set_gravity(E_Border *b, int gravity)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
Evas_List
|
||||
e_border_get_borders_list()
|
||||
{
|
||||
D_ENTER;
|
||||
D_RETURN_(borders);
|
||||
}
|
||||
|
|
|
@ -209,6 +209,8 @@ void e_border_update(E_Border *b);
|
|||
void e_border_set_layer(E_Border *b, int layer);
|
||||
void e_border_raise(E_Border *b);
|
||||
void e_border_lower(E_Border *b);
|
||||
void e_border_iconify(E_Border *b);
|
||||
void e_border_uniconify(E_Border *b);
|
||||
void e_border_raise_above(E_Border *b, E_Border *above);
|
||||
void e_border_lower_below(E_Border *b, E_Border *below);
|
||||
E_Border *e_border_current_focused(void);
|
||||
|
@ -219,5 +221,5 @@ int e_border_viewable(E_Border *b);
|
|||
void e_border_print_pos(char *buf, E_Border *b);
|
||||
void e_border_print_size(char *buf, E_Border *b);
|
||||
void e_border_set_gravity(E_Border *b, int gravity);
|
||||
|
||||
Evas_List e_border_get_borders_list();
|
||||
#endif
|
||||
|
|
161
src/e_ferite.fec
161
src/e_ferite.fec
|
@ -10,40 +10,109 @@ header %{
|
|||
#include "globals.h"
|
||||
#include "observer.h"
|
||||
|
||||
#define BorderObj ((E_Border *)(self->odata))
|
||||
#define BitsObj ((Ebits_Object)self->odata)
|
||||
#define EppObj ((E_Epplet *)(self->odata))
|
||||
#define EvasObj ((Evas_Object_Wrapper *)(self->odata))
|
||||
%}
|
||||
|
||||
class window {
|
||||
class Border {
|
||||
|
||||
function Border()
|
||||
%{
|
||||
%}
|
||||
|
||||
function get_name()
|
||||
%{
|
||||
if(BorderObj)
|
||||
FE_RETURN_STR(BorderObj->client.name, 0);
|
||||
%}
|
||||
|
||||
function get_title()
|
||||
%{
|
||||
if(BorderObj)
|
||||
FE_RETURN_STR(BorderObj->client.title, 0);
|
||||
%}
|
||||
|
||||
function get_class()
|
||||
%{
|
||||
if(BorderObj)
|
||||
FE_RETURN_STR(BorderObj->client.class, 0);
|
||||
%}
|
||||
|
||||
function get_x()
|
||||
%{
|
||||
if(BorderObj)
|
||||
FE_RETURN_LONG(BorderObj->current.x);
|
||||
%}
|
||||
|
||||
function get_y()
|
||||
%{
|
||||
if(BorderObj)
|
||||
FE_RETURN_LONG(BorderObj->current.y);
|
||||
%}
|
||||
|
||||
function get_width()
|
||||
%{
|
||||
if(BorderObj)
|
||||
FE_RETURN_LONG(BorderObj->current.w);
|
||||
%}
|
||||
|
||||
function get_height()
|
||||
%{
|
||||
if(BorderObj)
|
||||
FE_RETURN_LONG(BorderObj->current.h);
|
||||
%}
|
||||
|
||||
function get_name();
|
||||
function get_title();
|
||||
function get_class();
|
||||
function get_x();
|
||||
function get_y();
|
||||
function get_width();
|
||||
function get_height();
|
||||
|
||||
function move( number x, number y );
|
||||
function resize( number width, number height );
|
||||
|
||||
function show();
|
||||
function hide();
|
||||
function is_visible();
|
||||
function is_visible()
|
||||
%{
|
||||
if(BorderObj)
|
||||
{
|
||||
if (BorderObj->current.visible) { FE_RETURN_TRUE; }
|
||||
else { FE_RETURN_FALSE; }
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
function shade();
|
||||
function unshade();
|
||||
function is_shaded();
|
||||
|
||||
function iconify();
|
||||
function uniconify();
|
||||
function is_iconic();
|
||||
function iconify()
|
||||
%{
|
||||
e_border_iconify(BorderObj);
|
||||
%}
|
||||
|
||||
function uniconify()
|
||||
%{
|
||||
e_border_uniconify(BorderObj);
|
||||
%}
|
||||
|
||||
function is_iconic()
|
||||
%{
|
||||
if (BorderObj->client.iconified) { FE_RETURN_TRUE }
|
||||
else { FE_RETURN_FALSE }
|
||||
%}
|
||||
|
||||
function is_mapped();
|
||||
function is_transient();
|
||||
function is_shaped();
|
||||
|
||||
function raise()
|
||||
%{
|
||||
%}
|
||||
|
||||
function lower()
|
||||
%{
|
||||
%}
|
||||
|
||||
|
||||
function delete();
|
||||
function kill();
|
||||
|
||||
|
@ -79,6 +148,21 @@ namespace e {
|
|||
ecore_event_loop_quit();
|
||||
%}
|
||||
|
||||
function dataCopy(object from, object to)
|
||||
%{
|
||||
to->odata = from->odata;
|
||||
%}
|
||||
|
||||
function dataCmp(object from, object to)
|
||||
%{
|
||||
if (to->odata == from->odata) {FE_RETURN_TRUE;}
|
||||
else {FE_RETURN_FALSE;}
|
||||
%}
|
||||
|
||||
function getTime()
|
||||
%{
|
||||
FE_RETURN_DOUBLE(ecore_get_time());
|
||||
%}
|
||||
}
|
||||
|
||||
class EvasObject
|
||||
|
@ -291,6 +375,11 @@ class Ebits
|
|||
*/
|
||||
%}
|
||||
|
||||
function free()
|
||||
%{
|
||||
ebits_free(BitsObj);
|
||||
%}
|
||||
|
||||
function show()
|
||||
%{
|
||||
ebits_show(BitsObj);
|
||||
|
@ -321,11 +410,18 @@ class Ebits
|
|||
ebits_resize(BitsObj, w, h);
|
||||
%}
|
||||
|
||||
function set_layer(number l)
|
||||
function setLayer(number l)
|
||||
%{
|
||||
ebits_set_layer(BitsObj, l);
|
||||
%}
|
||||
|
||||
function setState(string bitName, string state)
|
||||
%{
|
||||
ebits_set_named_bit_state(BitsObj, bitName, state);
|
||||
ffree(bitName);
|
||||
ffree(state);
|
||||
%}
|
||||
|
||||
function getNamedBitGeometry(string bitName, number x, number y, number w, number h)
|
||||
%{
|
||||
double xx, yy, ww, hh;
|
||||
|
@ -537,38 +633,53 @@ class Epplet
|
|||
FE_RETURN_STR(retval, 0);
|
||||
%}
|
||||
|
||||
/* This doesn't work Yet */
|
||||
/*
|
||||
function addTimer(string name, number time, string func, number val, object data)
|
||||
%{
|
||||
char *buf;
|
||||
char buf[PATH_MAX];
|
||||
E_Epplet_CB_Info *cb;
|
||||
|
||||
cb = e_epplet_cb_new(script, func, data, NULL);
|
||||
D("got cb info\n")
|
||||
sprintf(buf, "%s:%s", EppObj->name, name);
|
||||
D("add timer: %s, time: %f\n", buf, time);
|
||||
ecore_add_event_timer(buf, time, e_epplet_timer_func, val, cb);
|
||||
D("timer added\n");
|
||||
snprintf(buf, PATH_MAX, "%s:%s", EppObj->name, name);
|
||||
ecore_add_event_timer(buf, (double)time, e_epplet_timer_func, val, cb);
|
||||
ffree(func);
|
||||
%}
|
||||
|
||||
function delTimer(string name)
|
||||
%{
|
||||
char *buf;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
sprintf(buf, "%s:%s", EppObj->name, name);
|
||||
snprintf(buf, PATH_MAX, "%s:%s", EppObj->name, name);
|
||||
ecore_del_event_timer(buf);
|
||||
ffree(name);
|
||||
%}
|
||||
*/
|
||||
|
||||
function addDesktopObserver(string func_name, object data)
|
||||
%{
|
||||
E_Epplet_Observer *obs;
|
||||
|
||||
obs = e_epplet_observer_new(script, func_name, data);
|
||||
obs = e_epplet_observer_new(script, func_name, data, "DESKTOP_SWITCH");
|
||||
e_epplet_observer_register_desktops(obs);
|
||||
ffree(func_name);
|
||||
%}
|
||||
|
||||
/*
|
||||
function addIconifyObserver(string func_name, object data)
|
||||
%{
|
||||
E_Epplet_Observer *obs;
|
||||
|
||||
obs = e_epplet_observer_new(script, func_name, data, "ICONIFY");
|
||||
e_epplet_observer_register_borders(obs);
|
||||
ffree(func_name);
|
||||
%}
|
||||
|
||||
function addUnconifyObserver(string func_name, object data)
|
||||
%{
|
||||
E_Epplet_Observer *obs;
|
||||
|
||||
obs = e_epplet_observer_new(script, func_name, data, "UNICONIFY");
|
||||
e_epplet_observer_register_borders(obs);
|
||||
ffree(func_name);
|
||||
%}
|
||||
*/
|
||||
}
|
||||
|
||||
|
|
87
src/epplet.c
87
src/epplet.c
|
@ -503,7 +503,6 @@ e_epplet_evas_cb (void *_data, Evas _e, Evas_Object _o,
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
/* somthing is wrong here. segfault when calling ferite function */
|
||||
void
|
||||
e_epplet_timer_func(int val, void *data)
|
||||
{
|
||||
|
@ -511,17 +510,17 @@ e_epplet_timer_func(int val, void *data)
|
|||
FeriteVariable **params;
|
||||
|
||||
D_ENTER;
|
||||
D("in timer func\n");
|
||||
// D("in timer func\n");
|
||||
cb = data;
|
||||
|
||||
if (cb->script) {
|
||||
D("creating params\n");
|
||||
// D("creating params\n");
|
||||
params = __ferite_create_parameter_list_from_data( cb->script, "on",
|
||||
cb->data, (float)val );
|
||||
D("calling func\n");
|
||||
// D("calling func\n");
|
||||
__ferite_variable_destroy( cb->script, __ferite_call_function( cb->script, cb->func, params));
|
||||
__ferite_delete_parameter_list( cb->script, params );
|
||||
D("func called, params deleted\n");
|
||||
// D("func called, params deleted\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -533,7 +532,7 @@ e_epplet_timer_func(int val, void *data)
|
|||
}
|
||||
|
||||
E_Epplet_Observer *
|
||||
e_epplet_observer_new(FeriteScript *script, char *func_name, FeriteObject *data)
|
||||
e_epplet_observer_new(FeriteScript *script, char *func_name, FeriteObject *data, char *event_type)
|
||||
{
|
||||
E_Epplet_Observer *obs;
|
||||
FeriteNamespaceBucket *nsb;
|
||||
|
@ -543,14 +542,28 @@ e_epplet_observer_new(FeriteScript *script, char *func_name, FeriteObject *data)
|
|||
obs = NEW(E_Epplet_Observer, 1);
|
||||
memset(obs, 0, sizeof(E_Epplet_Observer));
|
||||
|
||||
if (!strcmp(event_type, "DESKTOP_SWITCH"))
|
||||
e_observer_init(E_OBSERVER(obs), E_EVENT_DESKTOP_SWITCH,
|
||||
e_epplet_desktop_observer_func,
|
||||
(E_Cleanup_Func)e_epplet_observer_cleanup);
|
||||
#if 0
|
||||
else if (!strcmp(event_type, "ICONIFY"))
|
||||
e_observer_init(E_OBSERVER(obs), E_EVENT_WINDOW_ICONIFY,
|
||||
e_epplet_border_observer_func,
|
||||
(E_Cleanup_Func)e_epplet_observer_cleanup);
|
||||
else if (!strcmp(event_type, "UNICONIFY"))
|
||||
e_observer_init(E_OBSERVER(obs), E_EVENT_WINDOW_UNICONIFY,
|
||||
e_epplet_border_observer_func,
|
||||
(E_Cleanup_Func)e_epplet_observer_cleanup);
|
||||
else
|
||||
e_observer_init(E_OBSERVER(obs), E_EVENT_MAX,
|
||||
e_epplet_desktop_observer_func,
|
||||
(E_Cleanup_Func)e_epplet_observer_cleanup);
|
||||
#endif
|
||||
|
||||
nsb = __ferite_find_namespace( script, script->mainns, func_name, FENS_FNC);
|
||||
if (nsb != NULL)
|
||||
{
|
||||
e_observer_init(E_OBSERVER(obs), E_EVENT_DESKTOP_SWITCH,
|
||||
e_epplet_desktop_observer_func, (E_Cleanup_Func)e_epplet_observer_cleanup);
|
||||
D("initted, event: %i\n", E_OBSERVER(obs)->event);
|
||||
|
||||
obs->script = script;
|
||||
obs->func = nsb->data;
|
||||
if (data)
|
||||
|
@ -566,6 +579,7 @@ e_epplet_observer_new(FeriteScript *script, char *func_name, FeriteObject *data)
|
|||
static void
|
||||
e_epplet_observer_cleanup(E_Object *o)
|
||||
{
|
||||
/*FIXME: we need something here!!! Leeeeaky! */
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -585,6 +599,23 @@ e_epplet_observer_register_desktops(E_Epplet_Observer *obs)
|
|||
}
|
||||
D_RETURN;
|
||||
}
|
||||
#if 0
|
||||
void
|
||||
e_epplet_observer_register_borders(E_Epplet_Observer *obs)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
for (l = e_border_get_borders_list(); l; l = l->next)
|
||||
{
|
||||
E_Border *b = l->data;
|
||||
D("registering desktop...\n")
|
||||
e_observer_register_observee(E_OBSERVER(obs), E_OBSERVEE(b));
|
||||
D("desktop registered\n")
|
||||
}
|
||||
D_RETURN;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
e_epplet_desktop_observer_func(E_Observer *observer, E_Observee *observee)
|
||||
|
@ -620,3 +651,39 @@ e_epplet_desktop_observer_func(E_Observer *observer, E_Observee *observee)
|
|||
D_RETURN;
|
||||
}
|
||||
|
||||
#if 0 /* don't use this, its currently broken */
|
||||
void
|
||||
e_epplet_border_observer_func(E_Observer *observer, E_Observee *observee)
|
||||
{
|
||||
E_Epplet_Observer *obs;
|
||||
E_Border *b;
|
||||
FeriteVariable **params;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
obs = (E_Epplet_Observer *)observer;
|
||||
b = (E_Border *)observee;
|
||||
|
||||
obs->data->odata = b;
|
||||
|
||||
if (obs->script)
|
||||
{
|
||||
/*D("creating params\n");*/
|
||||
|
||||
params = __ferite_create_parameter_list_from_data( obs->script, "o",
|
||||
obs->data );
|
||||
/*D("calling func: %s\n", obs->func->name);*/
|
||||
__ferite_variable_destroy( obs->script, __ferite_call_function(
|
||||
obs->script, obs->func, params));
|
||||
/*D("function called\n");*/
|
||||
__ferite_delete_parameter_list( obs->script, params );
|
||||
/*D("func called, params deleted\n");*/
|
||||
}
|
||||
else
|
||||
{
|
||||
D("ERROR: script does not exist\n");
|
||||
}
|
||||
D_RETURN;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -90,8 +90,9 @@ void e_epplet_evas_cb (void *_data, Evas _e, Evas_Object _o,
|
|||
int _b, int _x, int _y);
|
||||
void e_epplet_timer_func(int val, void *data);
|
||||
E_Epplet_Observer *e_epplet_observer_new( FeriteScript *script,
|
||||
char *func_name, FeriteObject *data);
|
||||
char *func_name, FeriteObject *data, char *event_type);
|
||||
void e_epplet_observer_register_desktops(E_Epplet_Observer *obs);
|
||||
void e_epplet_desktop_observer_func(E_Observer *observer, E_Observee *observee);
|
||||
/*void e_epplet_border_observer_func(E_Observer *observer, E_Observee *observee);*/
|
||||
|
||||
#endif
|
||||
|
|
10
src/menu.c
10
src/menu.c
|
@ -564,9 +564,10 @@ static void
|
|||
e_menu_item_unselect (E_Menu_Item *mi)
|
||||
{
|
||||
D_ENTER;
|
||||
|
||||
if ((mi) && (mi->menu->selected == mi))
|
||||
D("mi unselect\n");
|
||||
if ((mi))// && (mi->menu->selected == mi))
|
||||
{
|
||||
D("mi && mi->menu->selected == mi\n");
|
||||
mi->menu->selected = curr_selected_item = NULL;
|
||||
mi->selected = 0;
|
||||
mi->menu->redo_sel = 1;
|
||||
|
@ -1240,7 +1241,6 @@ e_menu_hide(E_Menu *m)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
D("Menu hide!\n");
|
||||
|
||||
if (m->selected)
|
||||
{
|
||||
|
@ -1282,9 +1282,11 @@ e_menu_show_at_mouse(E_Menu *m, int x, int y, Time t)
|
|||
{
|
||||
D_ENTER;
|
||||
|
||||
D("show at mouse\n");
|
||||
m->current.x = x;
|
||||
m->current.y = y;
|
||||
m->time = t;
|
||||
D("show menu\n")
|
||||
e_menu_show(m);
|
||||
|
||||
D_RETURN;
|
||||
|
@ -1560,7 +1562,6 @@ e_menu_update_visibility(E_Menu *m)
|
|||
E_Menu_Item *mi;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
mi = m->selected;
|
||||
if (mi)
|
||||
{
|
||||
|
@ -1597,6 +1598,7 @@ e_menu_update_base(E_Menu *m)
|
|||
int location_changed = 0;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
|
||||
if (!m->changed) D_RETURN;
|
||||
|
||||
|
|
102
src/menubuild.c
102
src/menubuild.c
|
@ -4,6 +4,8 @@
|
|||
#include "exec.h"
|
||||
#include "util.h"
|
||||
#include "file.h"
|
||||
#include "border.h"
|
||||
#include "observer.h"
|
||||
|
||||
#ifdef USE_FERITE
|
||||
# include "e_ferite.h"
|
||||
|
@ -11,6 +13,7 @@
|
|||
|
||||
Evas_List build_menus = NULL;
|
||||
|
||||
static void e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
static void e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
|
||||
static void e_build_menu_unbuild(E_Build_Menu *bm);
|
||||
|
@ -22,6 +25,11 @@ static void e_build_menu_db_build(E_Build_Menu *bm);
|
|||
static void e_build_menu_gnome_apps_poll(int val, void *data);
|
||||
static void e_build_menu_gnome_apps_build(E_Build_Menu *bm);
|
||||
|
||||
static E_Menu *e_build_menu_iconified_borders_build(E_Build_Menu *bm);
|
||||
static void e_build_menu_iconified_borders_rebuild(E_Observer *observer, E_Observee *observee);
|
||||
|
||||
|
||||
/* ------------ various callbacks ---------------------- */
|
||||
static void
|
||||
e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
{
|
||||
|
@ -37,6 +45,21 @@ e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data)
|
|||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_cb_uniconify(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
{
|
||||
E_Border *b;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
b = data;
|
||||
e_border_uniconify(b);
|
||||
|
||||
D_RETURN;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_cb_script(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
{
|
||||
|
@ -58,6 +81,8 @@ e_build_menu_cb_script(E_Menu *m, E_Menu_Item *mi, void *data)
|
|||
UN(data);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*/
|
||||
|
||||
static void
|
||||
e_build_menu_unbuild(E_Build_Menu *bm)
|
||||
{
|
||||
|
@ -485,3 +510,80 @@ e_build_menu_new_from_gnome_apps(char *dir)
|
|||
|
||||
D_RETURN_(bm);
|
||||
}
|
||||
|
||||
/*------------------------- iconified borders menu ----------------*/
|
||||
|
||||
E_Build_Menu *
|
||||
e_build_menu_new_from_iconified_borders()
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
Evas_List l;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
bm = NEW(E_Build_Menu, 1);
|
||||
ZERO(bm, E_Build_Menu, 1);
|
||||
|
||||
e_observer_init(E_OBSERVER(bm), E_EVENT_WINDOW_ICONIFY, e_build_menu_iconified_borders_rebuild, (E_Cleanup_Func) e_build_menu_cleanup);
|
||||
|
||||
for (l = e_border_get_borders_list(); l; l = l->next)
|
||||
{
|
||||
E_Border *b = l->data;
|
||||
e_observer_register_observee(E_OBSERVER(bm), E_OBSERVEE(b));
|
||||
}
|
||||
bm->menu = e_build_menu_iconified_borders_build(bm);
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
|
||||
D_RETURN_(bm);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_iconified_borders_rebuild(E_Observer *observer, E_Observee *observee)
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
|
||||
D_ENTER;
|
||||
D("catch iconify, rebuild menu");
|
||||
bm = (E_Build_Menu *)observer;
|
||||
|
||||
e_build_menu_unbuild(bm);
|
||||
bm->menu = e_build_menu_iconified_borders_build(bm);
|
||||
D_RETURN;
|
||||
}
|
||||
|
||||
static E_Menu *
|
||||
e_build_menu_iconified_borders_build(E_Build_Menu *bm)
|
||||
{
|
||||
E_Menu *menu = NULL;
|
||||
Evas_List l, entries = NULL;
|
||||
|
||||
D_ENTER;
|
||||
|
||||
menu = e_menu_new();
|
||||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
|
||||
for (l = e_border_get_borders_list(); l; l = l->next)
|
||||
{
|
||||
E_Border *b;
|
||||
char *name = NULL;
|
||||
E_Menu_Item *menuitem;
|
||||
|
||||
b = l->data;
|
||||
|
||||
if (b->client.iconified)
|
||||
{
|
||||
e_strdup(name, b->client.title);
|
||||
D("adding menu item: %s\n", name);
|
||||
menuitem = e_menu_item_new(name);
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_uniconify, b);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
IF_FREE(name);
|
||||
}
|
||||
}
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
|
||||
D_RETURN_(menu);
|
||||
}
|
||||
|
|
|
@ -3,12 +3,13 @@
|
|||
|
||||
#include "e.h"
|
||||
#include "object.h"
|
||||
#include "observer.h"
|
||||
|
||||
typedef struct _E_Build_Menu E_Build_Menu;
|
||||
|
||||
struct _E_Build_Menu
|
||||
{
|
||||
E_Object o;
|
||||
E_Observer o;
|
||||
|
||||
char *file;
|
||||
time_t mod_time;
|
||||
|
@ -21,5 +22,6 @@ struct _E_Build_Menu
|
|||
|
||||
E_Build_Menu *e_build_menu_new_from_db(char *file);
|
||||
E_Build_Menu *e_build_menu_new_from_gnome_apps(char *dir);
|
||||
E_Build_Menu *e_build_menu_new_from_iconified_windows();
|
||||
|
||||
#endif
|
||||
|
|
|
@ -107,7 +107,7 @@ e_observee_notify_observers(E_Observee *o, E_Event_Type event)
|
|||
{
|
||||
obs = E_OBSERVER(obs_list->data);
|
||||
|
||||
if (obs->event == ECORE_EVENT_MAX ||
|
||||
if (obs->event == E_EVENT_MAX ||
|
||||
obs->event == event)
|
||||
{
|
||||
obs->notify_func(obs, o);
|
||||
|
|
|
@ -17,7 +17,11 @@ typedef void(*E_Notify_Func)(E_Observer *observer, E_Observee *observee);
|
|||
typedef enum _e_event_type
|
||||
{
|
||||
E_EVENT_WINDOW_FOCUS_IN,
|
||||
E_EVENT_DESKTOP_SWITCH
|
||||
E_EVENT_WINDOW_ICONIFY,
|
||||
E_EVENT_WINDOW_UNICONIFY,
|
||||
E_EVENT_WINDOW_MAXIMIZE,
|
||||
E_EVENT_DESKTOP_SWITCH,
|
||||
E_EVENT_MAX
|
||||
} E_Event_Type;
|
||||
|
||||
struct _e_observer
|
||||
|
|
27
src/view.c
27
src/view.c
|
@ -430,17 +430,36 @@ e_bg_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
|||
}
|
||||
}
|
||||
}
|
||||
/* else if (_b == 2)
|
||||
else if (_b == 2)
|
||||
{
|
||||
exit(0);
|
||||
}*/
|
||||
#if 0
|
||||
static E_Build_Menu *buildmenu = NULL;
|
||||
|
||||
if (!buildmenu)
|
||||
{
|
||||
D("building iconified windows menu\n");
|
||||
buildmenu = e_build_menu_new_from_iconified_borders();
|
||||
}
|
||||
if (buildmenu)
|
||||
{
|
||||
static E_Menu *menu = NULL;
|
||||
menu = buildmenu->menu;
|
||||
|
||||
if (menu)
|
||||
{
|
||||
D("showing iconified window menu\n");
|
||||
e_menu_show_at_mouse(menu, ev->rx, ev->ry, ev->time);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if (_b == 3)
|
||||
{
|
||||
static E_Build_Menu *buildmenu = NULL;
|
||||
|
||||
if (!buildmenu)
|
||||
{
|
||||
buildmenu = e_build_menu_new_from_gnome_apps("/usr/share/gnome/apps");
|
||||
buildmenu = e_build_menu_new_from_gnome_apps("/opt/gnome/share/gnome/apps");
|
||||
}
|
||||
if (buildmenu)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue