i think that should get things back to the way till had them.

for some reason, in e_configure,
  if ((v = e_view_machine_get_view_by_base_window(e->win)))
was acting as though true for all cases (including non views), and was segfaulting, so i made it
  v = e_view_machine_get_view_by_base_window(e->win);
  if (v)

any ideas why this would be necessary?


SVN revision: 6036
This commit is contained in:
rephorm 2002-03-04 23:57:56 +00:00 committed by rephorm
parent ce6d128739
commit b4aaf24a68
2 changed files with 100 additions and 214 deletions

View File

@ -333,7 +333,7 @@ e_bg_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
if (!(ev->mods & (multi_select_mod | range_select_mod))) if (!(ev->mods & (multi_select_mod | range_select_mod)))
{ {
v->select.last_count = v->select.count; v->select.last_count = v->select.count;
e_view_deselect_all(); e_view_deselect_all(v);
} }
if (_b == 1) if (_b == 1)
@ -554,18 +554,12 @@ e_bg_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
} }
void void
e_view_deselect_all(void) e_view_deselect_all(E_View *v)
{ {
Evas_List ll; Evas_List l;
D_ENTER; D_ENTER;
for (ll = VM->views; ll; ll = ll->next)
{
Evas_List l;
E_View *v;
v = ll->data;
for (l = v->icons; l; l = l->next) for (l = v->icons; l; l = l->next)
{ {
E_Icon *ic; E_Icon *ic;
@ -573,7 +567,6 @@ e_view_deselect_all(void)
ic = l->data; ic = l->data;
e_icon_deselect(ic); e_icon_deselect(ic);
} }
}
D_RETURN; D_RETURN;
} }
@ -581,17 +574,11 @@ e_view_deselect_all(void)
void void
e_view_deselect_all_except(E_Icon * not_ic) e_view_deselect_all_except(E_Icon * not_ic)
{ {
Evas_List ll; Evas_List l;
D_ENTER; D_ENTER;
for (ll = VM->views; ll; ll = ll->next) for (l = not_ic->view->icons; l; l = l->next)
{
Evas_List l;
E_View *v;
v = ll->data;
for (l = v->icons; l; l = l->next)
{ {
E_Icon *ic; E_Icon *ic;
@ -599,7 +586,6 @@ e_view_deselect_all_except(E_Icon * not_ic)
if (ic != not_ic) if (ic != not_ic)
e_icon_deselect(ic); e_icon_deselect(ic);
} }
}
D_RETURN; D_RETURN;
} }
@ -686,6 +672,8 @@ e_view_icons_apply_xy(E_View * v)
e_icon_apply_xy(ic); e_icon_apply_xy(ic);
} }
v->changed = 1;
D_RETURN; D_RETURN;
} }
@ -920,17 +908,15 @@ static void
e_configure(Ecore_Event * ev) e_configure(Ecore_Event * ev)
{ {
Ecore_Event_Window_Configure *e; Ecore_Event_Window_Configure *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; v = e_view_machine_get_view_by_base_window(e->win);
if (v)
v = l->data;
if (e->win == v->win.base)
{ {
/* win, root, x, y, w, h, wm_generated */ /* win, root, x, y, w, h, wm_generated */
D("Configure for view: %s\n", v->name); D("Configure for view: %s\n", v->name);
@ -1019,17 +1005,14 @@ static void
e_property(Ecore_Event * ev) e_property(Ecore_Event * ev)
{ {
Ecore_Event_Window_Configure *e; Ecore_Event_Window_Configure *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
} }
} }
@ -1041,17 +1024,14 @@ static void
e_unmap(Ecore_Event * ev) e_unmap(Ecore_Event * ev)
{ {
Ecore_Event_Window_Unmap *e; Ecore_Event_Window_Unmap *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
} }
} }
@ -1063,17 +1043,14 @@ static void
e_visibility(Ecore_Event * ev) e_visibility(Ecore_Event * ev)
{ {
Ecore_Event_Window_Unmap *e; Ecore_Event_Window_Unmap *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
} }
} }
@ -1085,17 +1062,14 @@ static void
e_focus_in(Ecore_Event * ev) e_focus_in(Ecore_Event * ev)
{ {
Ecore_Event_Window_Focus_In *e; Ecore_Event_Window_Focus_In *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
} }
} }
@ -1107,17 +1081,14 @@ static void
e_focus_out(Ecore_Event * ev) e_focus_out(Ecore_Event * ev)
{ {
Ecore_Event_Window_Focus_Out *e; Ecore_Event_Window_Focus_Out *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
} }
} }
@ -1129,17 +1100,14 @@ static void
e_delete(Ecore_Event * ev) e_delete(Ecore_Event * ev)
{ {
Ecore_Event_Window_Delete *e; Ecore_Event_Window_Delete *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
e_object_unref(E_OBJECT(v)); e_object_unref(E_OBJECT(v));
D_RETURN; D_RETURN;
@ -1168,19 +1136,15 @@ e_dnd_status(Ecore_Event * ev)
* int ok; * int ok;
* } Ecore_Event_Dnd_Drop_Status; * } Ecore_Event_Dnd_Drop_Status;
*/ */
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
if (dnd_pending_mode != E_DND_DELETED && if (dnd_pending_mode != E_DND_DELETED &&
dnd_pending_mode != E_DND_COPIED) dnd_pending_mode != E_DND_COPIED)
{ {
@ -1208,17 +1172,14 @@ static void
e_wheel(Ecore_Event * ev) e_wheel(Ecore_Event * ev)
{ {
Ecore_Event_Wheel *e; Ecore_Event_Wheel *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win)))
v = l->data;
if (e->win == v->win.main)
{ {
} }
} }
@ -1230,17 +1191,15 @@ static void
e_key_down(Ecore_Event * ev) e_key_down(Ecore_Event * ev)
{ {
Ecore_Event_Key_Down *e; Ecore_Event_Key_Down *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win))
|| (v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if ((e->win == v->win.base) || (e->win == v->win.main))
{ {
if (!strcmp(e->key, "Up")) if (!strcmp(e->key, "Up"))
{ {
@ -1285,17 +1244,16 @@ static void
e_key_up(Ecore_Event * ev) e_key_up(Ecore_Event * ev)
{ {
Ecore_Event_Key_Up *e; Ecore_Event_Key_Up *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
D_RETURN; if (e && e->win)
for (l = VM->views; l; l = l->next)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
{
v = l->data; }
} }
D_RETURN; D_RETURN;
@ -1305,18 +1263,15 @@ static void
e_mouse_down(Ecore_Event * ev) e_mouse_down(Ecore_Event * ev)
{ {
Ecore_Event_Mouse_Down *e; Ecore_Event_Mouse_Down *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
current_ev = ev; current_ev = ev;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win)))
v = l->data;
if (e->win == v->win.main)
{ {
int focus_mode; int focus_mode;
@ -1339,18 +1294,15 @@ static void
e_mouse_up(Ecore_Event * ev) e_mouse_up(Ecore_Event * ev)
{ {
Ecore_Event_Mouse_Up *e; Ecore_Event_Mouse_Up *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
current_ev = ev; current_ev = ev;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win)))
v = l->data;
if (e->win == v->win.main)
{ {
evas_event_button_up(v->evas, e->x, e->y, e->button); evas_event_button_up(v->evas, e->x, e->y, e->button);
current_ev = NULL; current_ev = NULL;
@ -1366,18 +1318,15 @@ static void
e_mouse_move(Ecore_Event * ev) e_mouse_move(Ecore_Event * ev)
{ {
Ecore_Event_Mouse_Move *e; Ecore_Event_Mouse_Move *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
current_ev = ev; current_ev = ev;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win)))
v = l->data;
if (e->win == v->win.main)
{ {
evas_event_move(v->evas, e->x, e->y); evas_event_move(v->evas, e->x, e->y);
current_ev = NULL; current_ev = NULL;
@ -1393,18 +1342,15 @@ static void
e_mouse_in(Ecore_Event * ev) e_mouse_in(Ecore_Event * ev)
{ {
Ecore_Event_Window_Enter *e; Ecore_Event_Window_Enter *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
current_ev = ev; current_ev = ev;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win)))
v = l->data;
if (e->win == v->win.main)
{ {
if (v->model->is_desktop) if (v->model->is_desktop)
{ {
@ -1423,18 +1369,15 @@ static void
e_mouse_out(Ecore_Event * ev) e_mouse_out(Ecore_Event * ev)
{ {
Ecore_Event_Window_Leave *e; Ecore_Event_Window_Leave *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
current_ev = ev; current_ev = ev;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win)))
v = l->data;
if (e->win == v->win.main)
{ {
evas_event_leave(v->evas); evas_event_leave(v->evas);
current_ev = NULL; current_ev = NULL;
@ -1450,17 +1393,15 @@ static void
e_window_expose(Ecore_Event * ev) e_window_expose(Ecore_Event * ev)
{ {
Ecore_Event_Window_Expose *e; Ecore_Event_Window_Expose *e;
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) current_ev = ev;
if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_main_window(e->win)))
v = l->data;
if (e->win == v->win.main)
{ {
if (!(v->pmap)) if (!(v->pmap))
evas_update_rect(v->evas, e->x, e->y, e->w, e->h); evas_update_rect(v->evas, e->x, e->y, e->w, e->h);
@ -1639,41 +1580,6 @@ e_view_queue_resort(E_View * v)
D_RETURN; 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 static void
e_view_cleanup(E_View * v) e_view_cleanup(E_View * v)
{ {
@ -1684,24 +1590,30 @@ e_view_cleanup(E_View * v)
* not via a timeout, because we will destroy the object after this.*/ * not via a timeout, because we will destroy the object after this.*/
e_view_geometry_record(v); e_view_geometry_record(v);
e_view_machine_unregister_view(v);
if (v->iconbar) if (v->iconbar)
{ {
/*e_iconbar_save_out_final(v->iconbar); */ /*e_iconbar_save_out_final(v->iconbar); */
e_object_unref(E_OBJECT(v->iconbar)); e_object_unref(E_OBJECT(v->iconbar));
} }
if (v->bg)
e_bg_free(v->bg);
if (v->scrollbar.h) if (v->scrollbar.h)
e_object_unref(E_OBJECT(v->scrollbar.h)); e_object_unref(E_OBJECT(v->scrollbar.h));
if (v->scrollbar.v) if (v->scrollbar.v)
e_object_unref(E_OBJECT(v->scrollbar.v)); e_object_unref(E_OBJECT(v->scrollbar.v));
if (v->layout)
e_object_unref(E_OBJECT(v->layout));
ecore_window_destroy(v->win.base); ecore_window_destroy(v->win.base);
snprintf(name, PATH_MAX, "resort_timer.%s", v->name); snprintf(name, PATH_MAX, "resort_timer.%s", v->name);
ecore_del_event_timer(name); ecore_del_event_timer(name);
if (v->layout) /* unregister with the underlying model and the global list of views */
e_object_unref(v->layout); e_view_model_unregister_view(v);
e_view_machine_unregister_view(v);
/* FIXME: clean up the rest!!! this leaks ... */ /* FIXME: clean up the rest!!! this leaks ... */
/* Call the destructor of the base class */ /* Call the destructor of the base class */
@ -1738,7 +1650,6 @@ e_view_new(void)
v->options.back_pixmap = 0; v->options.back_pixmap = 0;
#endif #endif
#endif #endif
v->select.lock = 0;
v->select.config.grad_size.l = 8; v->select.config.grad_size.l = 8;
v->select.config.grad_size.r = 8; v->select.config.grad_size.r = 8;
v->select.config.grad_size.t = 8; v->select.config.grad_size.t = 8;
@ -1784,7 +1695,6 @@ e_view_set_dir(E_View * v, char *path, int is_desktop)
D("Model for this dir doesn't exist, make a new one\n"); D("Model for this dir doesn't exist, make a new one\n");
m = e_view_model_new(); m = e_view_model_new();
VM->models = evas_list_append(VM->models, m);
e_view_model_set_dir(m, path); e_view_model_set_dir(m, path);
snprintf(buf, PATH_MAX, "%s/.e_background.bg.db", m->dir); snprintf(buf, PATH_MAX, "%s/.e_background.bg.db", m->dir);
@ -1807,8 +1717,7 @@ e_view_set_dir(E_View * v, char *path, int is_desktop)
if (m) if (m)
{ {
v->model = m; e_view_model_register_view(m, v);
v->model->views = evas_list_append(v->model->views, v);
/* FIXME do a real naming scheme here */ /* FIXME do a real naming scheme here */
snprintf(buf, PATH_MAX, "%s:%d", v->model->dir, snprintf(buf, PATH_MAX, "%s:%d", v->model->dir,
e_object_get_usecount(E_OBJECT(v->model))); e_object_get_usecount(E_OBJECT(v->model)));
@ -2284,12 +2193,8 @@ e_dnd_data_request(Ecore_Event * ev)
* } * }
*/ */
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (!(v = e_view_machine_get_view_by_base_window(e->win)))
{ D_RETURN;
v = l->data;
if (e->win == v->win.base)
break;
}
if (e->uri_list) if (e->uri_list)
{ {
@ -2400,17 +2305,14 @@ e_dnd_drop_end(Ecore_Event * ev)
* * Window win, root, source_win; * * Window win, root, source_win;
* * } Ecore_Event_Dnd_Drop_End; * * } Ecore_Event_Dnd_Drop_End;
*/ */
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
if (v_dnd_source) if (v_dnd_source)
{ {
@ -2429,7 +2331,6 @@ e_dnd_drop_end(Ecore_Event * ev)
} }
e_dnd_drop_request_free(); e_dnd_drop_request_free();
D_RETURN;
} }
} }
@ -2448,17 +2349,14 @@ e_dnd_drop_position(Ecore_Event * ev)
* int x, y; * int x, y;
* } Ecore_Event_Dnd_Drop_Position; * } Ecore_Event_Dnd_Drop_Position;
*/ */
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
if (v->iconbar) if (v->iconbar)
{ {
@ -2484,7 +2382,6 @@ e_dnd_drop_position(Ecore_Event * ev)
v->size.w, v->size.h); v->size.w, v->size.h);
/* todo - cache window extents, don't send again within these extents. */ /* todo - cache window extents, don't send again within these extents. */
D_RETURN;
} }
} }
@ -2502,29 +2399,24 @@ e_dnd_drop(Ecore_Event * ev)
* Window win, root, source_win; * Window win, root, source_win;
* } Ecore_Event_Dnd_Drop; * } Ecore_Event_Dnd_Drop;
*/ */
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
/* Dropped! Handle data */ /* Dropped! Handle data */
/* Same view or same underlying dir? Mark to skip action */ /* Same view or same underlying dir? Mark to skip action */
if (e->win == e->source_win || v->model == v_dnd_source->model) if (e->win == e->source_win || v->model == v_dnd_source->model)
v->drag.matching_drop_attempt = 1; v_dnd_source->drag.matching_drop_attempt = 1;
/* Perform the action... */ /* Perform the action... */
e_dnd_handle_drop(v); e_dnd_handle_drop(v);
ecore_window_dnd_send_finished(v->win.base, e->source_win); ecore_window_dnd_send_finished(v->win.base, e->source_win);
e_dnd_drop_request_free(); e_dnd_drop_request_free();
D_RETURN;
} }
} }
@ -2545,17 +2437,14 @@ e_dnd_drop_request(Ecore_Event * ev)
* int copy, link, move; * int copy, link, move;
* } Ecore_Event_Dnd_Drop_Request; * } Ecore_Event_Dnd_Drop_Request;
*/ */
Evas_List l; E_View *v;
D_ENTER; D_ENTER;
e = ev->event; e = ev->event;
for (l = VM->views; l; l = l->next) if (e && e->win)
{ {
E_View *v; if ((v = e_view_machine_get_view_by_base_window(e->win)))
v = l->data;
if (e->win == v->win.base)
{ {
/* if it exists, we already have the data... */ /* if it exists, we already have the data... */
if ((!dnd_files) && (e->num_files > 0)) if ((!dnd_files) && (e->num_files > 0))
@ -2571,9 +2460,9 @@ e_dnd_drop_request(Ecore_Event * ev)
dnd_num_files = e->num_files; dnd_num_files = e->num_files;
/* if the dnd source is e itself then dont use the event mode */ /* 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; dnd_pending_mode = v->drag.drop_mode;
} }
else else
@ -2588,7 +2477,6 @@ e_dnd_drop_request(Ecore_Event * ev)
dnd_pending_mode = E_DND_ASK; dnd_pending_mode = E_DND_ASK;
} }
} }
D_RETURN;
} }
} }

View File

@ -124,9 +124,6 @@ struct _E_View
struct struct
{ {
int on; int on;
/* we set this in all other views of our view_model
* when the first icon in a view is selected. */
int lock;
/* The number of selected icons. */ /* The number of selected icons. */
int count; int count;
/* The number of icons we selected the last time. /* The number of icons we selected the last time.
@ -139,6 +136,7 @@ struct _E_View
int x, y; int x, y;
} }
down; down;
struct struct
{ {
struct struct
@ -170,6 +168,7 @@ struct _E_View
obj; obj;
} }
select; select;
struct struct
{ {
int started; int started;
@ -236,7 +235,7 @@ struct _E_View
void e_view_init(void); void e_view_init(void);
void e_view_selection_update(E_View * v); void e_view_selection_update(E_View * v);
void e_view_deselect_all(void); void e_view_deselect_all(E_View *v);
void e_view_deselect_all_except(E_Icon * not_ic); void e_view_deselect_all_except(E_Icon * not_ic);
Ecore_Event *e_view_get_current_event(void); Ecore_Event *e_view_get_current_event(void);
int e_view_filter_file(E_View * v, char *file); int e_view_filter_file(E_View * v, char *file);
@ -258,7 +257,6 @@ void e_view_resort(E_View * v);
void e_view_queue_geometry_record(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_icon_xy_record(E_View * v);
void e_view_queue_resort(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 * e_view_new - Creates a new view object