- add e_view_machine_get_view_by_[base|main]_window

- use it in about a zillion places
- now VM->views is only accessed from within e_view_machine.c


SVN revision: 6005
This commit is contained in:
Till Adam 2002-03-01 20:50:46 +00:00
parent 5a88ba9d13
commit cf83b660f7
6 changed files with 394 additions and 514 deletions

View File

@ -7,6 +7,7 @@
#include "icccm.h"
#include "keys.h"
#include "view.h"
#include "e_view_machine.h"
#include "util.h"
#include "guides.h"
#include "bordermenu.h"
@ -1566,7 +1567,7 @@ e_act_exit_start (E_Object *object, E_Action *a, void *data, int x, int y, int r
{
D_ENTER;
e_view_close_all();
e_view_machine_close_all_views();
ecore_focus_mode_reset();
ecore_sync();
@ -1591,7 +1592,7 @@ e_act_restart_start (E_Object *object, E_Action *a, void *data, int x, int y, in
{
D_ENTER;
e_view_close_all();
e_view_machine_close_all_views();
ecore_focus_mode_reset();
ecore_sync();

View File

@ -43,6 +43,18 @@ e_view_machine_unregister_view(E_View *v)
D_RETURN;
}
void
e_view_machine_close_all_views(void)
{
Evas_List l;
D_ENTER;
for (l=VM->views;l;l=l->next)
{
E_View *v = l->data;
e_view_machine_unregister_view(v);
}
D_RETURN;
}
E_View_Model *
e_view_machine_model_lookup(char *path)
@ -76,5 +88,30 @@ e_view_machine_model_lookup(char *path)
D_RETURN_(NULL);
}
E_View *
e_view_machine_get_view_by_main_window(Window win)
{
Evas_List l;
D_ENTER;
for (l = VM->views; l; l = l->next)
{
E_View *v = l->data;
if (v && win == v->win.main)
D_RETURN_(v);
}
D_RETURN_(NULL);
}
E_View *
e_view_machine_get_view_by_base_window(Window win)
{
Evas_List l;
D_ENTER;
for (l = VM->views; l; l = l->next)
{
E_View *v = l->data;
if (v && win == v->win.base)
D_RETURN_(v);
}
D_RETURN_(NULL);
}

View File

@ -12,5 +12,9 @@ typedef struct _e_view_machine E_View_Machine;
void e_view_machine_init(void);
void e_view_machine_register_view(E_View *v);
void e_view_machine_unregister_view(E_View *v);
void e_view_machine_close_all_views(void);
E_View_Model *e_view_machine_model_lookup(char *path);
E_View *e_view_machine_get_view_by_main_window(Window win);
E_View *e_view_machine_get_view_by_base_window(Window win);
#endif

View File

@ -864,17 +864,14 @@ static void
e_configure(Ecore_Event * ev)
{
Ecore_Event_Window_Configure *e;
Evas_List l;
E_View *v;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
if (e && e->win)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
/* win, root, x, y, w, h, wm_generated */
D("Configure for view: %s\n", v->name);
@ -924,7 +921,6 @@ e_configure(Ecore_Event * ev)
}
}
}
D_RETURN;
}
@ -932,21 +928,16 @@ static void
e_property(Ecore_Event * ev)
{
Ecore_Event_Window_Configure *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
}
}
D_RETURN;
}
@ -954,21 +945,16 @@ static void
e_unmap(Ecore_Event * ev)
{
Ecore_Event_Window_Unmap *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
}
}
D_RETURN;
}
@ -976,21 +962,16 @@ static void
e_visibility(Ecore_Event * ev)
{
Ecore_Event_Window_Unmap *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
}
}
D_RETURN;
}
@ -998,21 +979,16 @@ static void
e_focus_in(Ecore_Event * ev)
{
Ecore_Event_Window_Focus_In *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
}
}
D_RETURN;
}
@ -1020,21 +996,16 @@ static void
e_focus_out(Ecore_Event * ev)
{
Ecore_Event_Window_Focus_Out *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
}
}
D_RETURN;
}
@ -1042,23 +1013,17 @@ static void
e_delete(Ecore_Event * ev)
{
Ecore_Event_Window_Delete *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
e_object_unref(E_OBJECT(v));
D_RETURN;
}
}
D_RETURN;
}
@ -1081,19 +1046,14 @@ e_dnd_status(Ecore_Event * ev)
* int ok;
* } Ecore_Event_Dnd_Drop_Status;
*/
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
if( dnd_pending_mode != E_DND_DELETED &&
dnd_pending_mode != E_DND_COPIED )
{
@ -1106,14 +1066,11 @@ e_dnd_status(Ecore_Event * ev)
else
dnd_pending_mode = E_DND_ASK;
}
ecore_window_dnd_ok(e->ok);
v->changed = 1;
v->drag.icon_hide = 1;
}
}
D_RETURN;
}
@ -1122,21 +1079,16 @@ static void
e_wheel(Ecore_Event * ev)
{
Ecore_Event_Wheel *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.main)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_main_window(e->win)) )
{
}
}
D_RETURN;
}
@ -1144,18 +1096,14 @@ static void
e_key_down(Ecore_Event * ev)
{
Ecore_Event_Key_Down *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if ((e->win == v->win.base) ||
(e->win == v->win.main))
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_main_window(e->win))
||(v=e_view_machine_get_view_by_base_window(e->win)) )
{
if (!strcmp(e->key, "Up"))
{
@ -1185,10 +1133,8 @@ e_key_down(Ecore_Event * ev)
{
}
}
D_RETURN;
}
}
D_RETURN;
}
@ -1196,19 +1142,16 @@ static void
e_key_up(Ecore_Event * ev)
{
Ecore_Event_Key_Up *e;
Evas_List l;
D_ENTER;
e = ev->event;
D_RETURN;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_main_window(e->win)) )
{
}
}
D_RETURN;
}
@ -1216,18 +1159,14 @@ static void
e_mouse_down(Ecore_Event * ev)
{
Ecore_Event_Mouse_Down *e;
Evas_List l;
D_ENTER;
e = ev->event;
current_ev = ev;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.main)
D_ENTER;
e = ev->event;
current_ev = ev;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_main_window(e->win)) )
{
int focus_mode;
E_CFG_INT(cfg_focus_mode, "settings", "/focus/mode", 0);
@ -1241,7 +1180,6 @@ e_mouse_down(Ecore_Event * ev)
}
}
current_ev = NULL;
D_RETURN;
}
@ -1249,26 +1187,19 @@ static void
e_mouse_up(Ecore_Event * ev)
{
Ecore_Event_Mouse_Up *e;
Evas_List l;
D_ENTER;
e = ev->event;
current_ev = ev;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.main)
D_ENTER;
e = ev->event;
current_ev = ev;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_main_window(e->win)) )
{
evas_event_button_up(v->evas, e->x, e->y, e->button);
current_ev = NULL;
D_RETURN;
}
}
current_ev = NULL;
D_RETURN;
}
@ -1276,26 +1207,19 @@ static void
e_mouse_move(Ecore_Event * ev)
{
Ecore_Event_Mouse_Move *e;
Evas_List l;
D_ENTER;
e = ev->event;
current_ev = ev;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.main)
D_ENTER;
e = ev->event;
current_ev = ev;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_main_window(e->win)) )
{
evas_event_move(v->evas, e->x, e->y);
current_ev = NULL;
D_RETURN;
}
}
current_ev = NULL;
D_RETURN;
}
@ -1303,25 +1227,19 @@ static void
e_mouse_in(Ecore_Event * ev)
{
Ecore_Event_Window_Enter *e;
Evas_List l;
D_ENTER;
e = ev->event;
current_ev = ev;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.main)
D_ENTER;
e = ev->event;
current_ev = ev;
if (e && e->win)
{
if( (v = e_view_machine_get_view_by_main_window(e->win)) )
{
if (v->model->is_desktop)
{
evas_event_enter(v->evas);
}
current_ev = NULL;
D_RETURN;
}
}
current_ev = NULL;
@ -1333,22 +1251,16 @@ static void
e_mouse_out(Ecore_Event * ev)
{
Ecore_Event_Window_Leave *e;
Evas_List l;
D_ENTER;
e = ev->event;
current_ev = ev;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.main)
D_ENTER;
e = ev->event;
current_ev = ev;
if (e && e->win)
{
if( (v = e_view_machine_get_view_by_main_window(e->win)) )
{
evas_event_leave(v->evas);
current_ev = NULL;
D_RETURN;
}
}
current_ev = NULL;
@ -1360,25 +1272,20 @@ static void
e_window_expose(Ecore_Event * ev)
{
Ecore_Event_Window_Expose *e;
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.main)
D_ENTER;
e = ev->event;
current_ev = ev;
if (e && e->win)
{
if( (v = e_view_machine_get_view_by_main_window(e->win)) )
{
if (!(v->pmap))
evas_update_rect(v->evas, e->x, e->y, e->w, e->h);
v->changed = 1;
D_RETURN;
}
}
D_RETURN;
}
@ -1541,41 +1448,6 @@ e_view_queue_resort(E_View *v)
D_RETURN;
}
E_View *
e_view_find_by_window(Window win)
{
Evas_List l;
D_ENTER;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (v->win.base == win)
D_RETURN_(v);
}
D_RETURN_(NULL);
}
void
e_view_close_all(void)
{
D_ENTER;
while (VM->views)
{
E_View *v;
v = VM->views->data;
e_object_unref(E_OBJECT(v));
}
D_RETURN;
}
static void
e_view_cleanup(E_View *v)
{
@ -2113,7 +1985,6 @@ e_dnd_data_request(Ecore_Event * ev)
* Atom destination_atom;
* } Ecore_Event_Dnd_Data_Request;
*/
Evas_List l;
E_View *v;
Evas_List ll;
char *data = NULL;
@ -2142,12 +2013,8 @@ e_dnd_data_request(Ecore_Event * ev)
* }
*/
e = ev->event;
for (l = VM->views; l; l = l->next)
{
v = l->data;
if (e->win == v->win.base)
break;
}
if ( !(v =e_view_machine_get_view_by_base_window(e->win)) )
D_RETURN;
if (e->uri_list)
{
@ -2243,9 +2110,7 @@ e_dnd_data_request(Ecore_Event * ev)
D_RETURN;
}
static void
static void
e_dnd_drop_end(Ecore_Event * ev)
{
Ecore_Event_Dnd_Drop_End *e;
@ -2255,17 +2120,14 @@ e_dnd_drop_end(Ecore_Event * ev)
* Window win, root, source_win;
* } Ecore_Event_Dnd_Drop_End;
*/
Evas_List l;
E_View *v;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
if (e && e->win)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
if(v_dnd_source)
{
@ -2282,12 +2144,9 @@ e_dnd_drop_end(Ecore_Event * ev)
v_dnd_source->changed = 1;
v_dnd_source->drag.icon_show = 1;
}
e_dnd_drop_request_free();
D_RETURN;
}
}
D_RETURN;
}
@ -2303,17 +2162,13 @@ e_dnd_drop_position(Ecore_Event * ev)
* int x, y;
* } Ecore_Event_Dnd_Drop_Position;
*/
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
if (v->iconbar)
{
@ -2339,10 +2194,8 @@ e_dnd_drop_position(Ecore_Event * ev)
);
/* todo - cache window extents, don't send again within these extents. */
D_RETURN;
}
}
D_RETURN;
}
@ -2356,17 +2209,13 @@ e_dnd_drop(Ecore_Event * ev)
* Window win, root, source_win;
* } Ecore_Event_Dnd_Drop;
*/
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v=e_view_machine_get_view_by_base_window(e->win)) )
{
/* Dropped! Handle data */
/* Same view or same underlying dir? Mark to skip action */
@ -2377,11 +2226,8 @@ e_dnd_drop(Ecore_Event * ev)
ecore_window_dnd_send_finished(v->win.base, e->source_win);
e_dnd_drop_request_free();
D_RETURN;
}
}
D_RETURN;
}
@ -2398,17 +2244,13 @@ e_dnd_drop_request(Ecore_Event * ev)
* int copy, link, move;
* } Ecore_Event_Dnd_Drop_Request;
*/
Evas_List l;
D_ENTER;
e = ev->event;
for (l = VM->views; l; l = l->next)
{
E_View *v;
v = l->data;
if (e->win == v->win.base)
D_ENTER;
e = ev->event;
if (e && e->win)
{
if ( (v = e_view_machine_get_view_by_base_window(e->win)) )
{
/* if it exists, we already have the data... */
if ((!dnd_files ) && (e->num_files > 0))
@ -2424,9 +2266,8 @@ e_dnd_drop_request(Ecore_Event * ev)
dnd_num_files = e->num_files;
/* if the dnd source is e itself then dont use the event mode */
if (e_view_find_by_window(e->source_win))
if ( (v == e_view_machine_get_view_by_base_window(e->source_win)))
{
v = e_view_find_by_window(e->source_win);
dnd_pending_mode = v->drag.drop_mode;
}
else
@ -2441,10 +2282,8 @@ e_dnd_drop_request(Ecore_Event * ev)
dnd_pending_mode = E_DND_ASK;
}
}
D_RETURN;
}
}
D_RETURN;
}

View File

@ -207,7 +207,6 @@ void e_view_resort(E_View *v);
void e_view_queue_geometry_record(E_View *v);
void e_view_queue_icon_xy_record(E_View *v);
void e_view_queue_resort(E_View *v);
E_View *e_view_find_by_window(Window win);
/**
* e_view_new - Creates a new view object