parent
35a64ef50d
commit
fc45f10e1f
|
@ -182,7 +182,7 @@ e_border_init(void)
|
|||
E_EVENT_BORDER_LOWER = ecore_event_type_new();
|
||||
E_EVENT_BORDER_ICON_CHANGE = ecore_event_type_new();
|
||||
|
||||
focus_fix_timer = ecore_timer_add(0.5, _e_border_cb_focus_fix, NULL);
|
||||
focus_fix_timer = ecore_timer_add(0.1, _e_border_cb_focus_fix, NULL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -412,7 +412,6 @@ e_border_show(E_Border *bd)
|
|||
{
|
||||
E_Event_Border_Show *ev;
|
||||
unsigned int visible;
|
||||
unsigned int hidden;
|
||||
|
||||
E_OBJECT_CHECK(bd);
|
||||
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
|
||||
|
@ -422,13 +421,10 @@ e_border_show(E_Border *bd)
|
|||
e_hints_window_visible_set(bd);
|
||||
bd->visible = 1;
|
||||
bd->changes.visible = 1;
|
||||
bd->hidden = 0;
|
||||
|
||||
visible = 1;
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_MAPPED, &visible, 1);
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_MANAGED, &visible, 1);
|
||||
hidden = 0;
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_HIDDEN, &hidden, 1);
|
||||
|
||||
ev = calloc(1, sizeof(E_Event_Border_Show));
|
||||
ev->border = bd;
|
||||
|
@ -1117,7 +1113,11 @@ e_border_find_by_client_window(Ecore_X_Window win)
|
|||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
if (bd->client.win == win) return bd;
|
||||
if (bd->client.win == win)
|
||||
{
|
||||
if (!e_object_is_del(E_OBJECT(bd)))
|
||||
return bd;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1132,7 +1132,11 @@ e_border_find_by_frame_window(Ecore_X_Window win)
|
|||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
if (bd->bg_win == win) return bd;
|
||||
if (bd->bg_win == win)
|
||||
{
|
||||
if (!e_object_is_del(E_OBJECT(bd)))
|
||||
return bd;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1147,7 +1151,11 @@ e_border_find_by_window(Ecore_X_Window win)
|
|||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
if (bd->win == win) return bd;
|
||||
if (bd->win == win)
|
||||
{
|
||||
if (!e_object_is_del(E_OBJECT(bd)))
|
||||
return bd;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1388,8 +1396,11 @@ _e_border_free(E_Border *bd)
|
|||
bd->handlers = evas_list_remove_list(bd->handlers, bd->handlers);
|
||||
ecore_event_handler_del(h);
|
||||
}
|
||||
ecore_x_window_reparent(bd->client.win, bd->zone->container->manager->root, bd->x + bd->client_inset.l, bd->y + bd->client_inset.t);
|
||||
ecore_x_window_save_set_del(bd->client.win);
|
||||
if (!bd->already_unparented)
|
||||
{
|
||||
ecore_x_window_reparent(bd->client.win, bd->zone->container->manager->root, bd->x + bd->client_inset.l, bd->y + bd->client_inset.t);
|
||||
ecore_x_window_save_set_del(bd->client.win);
|
||||
}
|
||||
if (bd->client.border.name) free(bd->client.border.name);
|
||||
if (bd->client.icccm.title) free(bd->client.icccm.title);
|
||||
if (bd->client.icccm.name) free(bd->client.icccm.name);
|
||||
|
@ -1433,16 +1444,7 @@ _e_border_cb_window_show_request(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
#if 0
|
||||
else if (e_object_is_del(E_OBJECT(bd)))
|
||||
{
|
||||
printf("Rescue this poor border from deletion!\n");
|
||||
E_OBJECT(bd)->deleted = 0;
|
||||
e_object_ref(E_OBJECT(bd));
|
||||
e_border_show(bd);
|
||||
e_border_raise(bd);
|
||||
}
|
||||
#endif
|
||||
printf("border MAP REQ %x\n", e->win);
|
||||
e_border_show(bd);
|
||||
e_border_raise(bd);
|
||||
return 1;
|
||||
|
@ -1456,6 +1458,7 @@ static int _e_border_cb_window_destroy(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
printf("border DESTROY %x\n", e->win);
|
||||
e_border_hide(bd, 0);
|
||||
e_object_del(E_OBJECT(bd));
|
||||
return 1;
|
||||
|
@ -1472,12 +1475,13 @@ _e_border_cb_window_hide(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
printf("border HIDE %x\n", e->win);
|
||||
if (bd->ignore_first_unmap > 0)
|
||||
{
|
||||
bd->ignore_first_unmap--;
|
||||
return 1;
|
||||
}
|
||||
#if 1
|
||||
printf("HIDE win %x\n", e->win);
|
||||
/* Don't delete hidden or iconified windows */
|
||||
if ((bd->iconic) || (!bd->visible))
|
||||
{
|
||||
|
@ -1485,25 +1489,17 @@ _e_border_cb_window_hide(void *data, int ev_type, void *ev)
|
|||
}
|
||||
else
|
||||
{
|
||||
printf("repar\n");
|
||||
e_border_hide(bd, 0);
|
||||
// ecore_x_window_hide(bd->client.win);
|
||||
ecore_x_window_reparent(bd->client.win,
|
||||
bd->zone->container->manager->root,
|
||||
bd->x + bd->client_inset.l,
|
||||
bd->y + bd->client_inset.t);
|
||||
ecore_x_window_save_set_del(bd->client.win);
|
||||
bd->already_unparented = 1;
|
||||
e_object_del(E_OBJECT(bd));
|
||||
}
|
||||
#else
|
||||
/* we need to re-enable the above. when clients hide windows they often
|
||||
* dont destory - keep around to do somethign else with. if we dont unmanage
|
||||
* then we have all sorts of problems believeing it still exists. bigger
|
||||
* problems than mplayer. :)
|
||||
*/
|
||||
if (bd->visible)
|
||||
{
|
||||
unsigned int hidden;
|
||||
|
||||
bd->hidden = 1;
|
||||
hidden = 1;
|
||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_HIDDEN, &hidden, 1);
|
||||
}
|
||||
e_border_hide(bd, 1);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1517,7 +1513,9 @@ _e_border_cb_window_reparent(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
if (e->parent == bd->client.shell_win) return 1;
|
||||
printf("border REPARENT %x\n", e->win);
|
||||
// if (e->parent == bd->client.shell_win) return 1;
|
||||
if (ecore_x_window_parent_get(e->win) == bd->client.shell_win) return 1;
|
||||
e_border_hide(bd, 0);
|
||||
e_object_del(E_OBJECT(bd));
|
||||
return 1;
|
||||
|
@ -1543,6 +1541,7 @@ _e_border_cb_window_configure_request(void *data, int ev_type, void *ev)
|
|||
e->abovewin, e->detail);
|
||||
return 1;
|
||||
}
|
||||
printf("border CONFIG %x\n", e->win);
|
||||
printf("##- CONFIGURE REQ 0x%0x mask: %c%c%c%c%c%c%c\n",
|
||||
e->win,
|
||||
(e->value_mask & ECORE_X_WINDOW_CONFIGURE_MASK_X) ? 'X':' ',
|
||||
|
@ -1618,13 +1617,19 @@ _e_border_cb_window_configure_request(void *data, int ev_type, void *ev)
|
|||
{
|
||||
obd = e_border_find_by_client_window(e->abovewin);
|
||||
if (obd)
|
||||
e_border_stack_above(bd, obd);
|
||||
{
|
||||
printf("border STACK ABOVE %x\n", e->abovewin);
|
||||
e_border_stack_above(bd, obd);
|
||||
}
|
||||
}
|
||||
else if (e->detail == ECORE_X_WINDOW_STACK_BELOW)
|
||||
{
|
||||
obd = e_border_find_by_client_window(e->abovewin);
|
||||
if (obd)
|
||||
e_border_stack_below(bd, obd);
|
||||
{
|
||||
printf("border STACK BELOW %x\n", e->abovewin);
|
||||
e_border_stack_below(bd, obd);
|
||||
}
|
||||
}
|
||||
else if (e->detail == ECORE_X_WINDOW_STACK_TOP_IF)
|
||||
{
|
||||
|
@ -1683,6 +1688,7 @@ _e_border_cb_window_resize_request(void *data, int ev_type, void *ev)
|
|||
ecore_x_window_resize(e->win, e->w, e->h);
|
||||
return 1;
|
||||
}
|
||||
printf("border RESIZE %x\n", e->win);
|
||||
printf("##- RESIZE REQ 0x%x\n", bd->client.win);
|
||||
{
|
||||
int w, h;
|
||||
|
@ -1733,6 +1739,7 @@ _e_border_cb_window_property(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
printf("border PROP %x\n", e->win);
|
||||
if (e->atom == ECORE_X_ATOM_WM_NAME)
|
||||
{
|
||||
bd->client.icccm.fetch.title = 1;
|
||||
|
@ -1809,6 +1816,7 @@ _e_border_cb_window_shape(void *data, int ev_type, void *ev)
|
|||
bd = e_border_find_by_client_window(e->win);
|
||||
if (bd)
|
||||
{
|
||||
printf("border SHAPE %x\n", e->win);
|
||||
bd->changes.shape = 1;
|
||||
bd->changed = 1;
|
||||
return 1;
|
||||
|
@ -1839,6 +1847,7 @@ _e_border_cb_window_focus_in(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
printf("border FOCUS %x\n", e->win);
|
||||
#ifdef INOUTDEBUG_FOCUS
|
||||
{
|
||||
time_t t;
|
||||
|
@ -1884,6 +1893,7 @@ _e_border_cb_window_focus_out(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
printf("border UNFOCUS %x\n", e->win);
|
||||
#ifdef INOUTDEBUG_FOCUS
|
||||
{
|
||||
time_t t;
|
||||
|
@ -1952,6 +1962,7 @@ _e_border_cb_window_state(void *data, int ev_type, void *ev)
|
|||
e = ev;
|
||||
bd = e_border_find_by_client_window(e->win);
|
||||
if (!bd) return 1;
|
||||
printf("border STATE %x\n", e->win);
|
||||
for (i = 0; i < 2; i++)
|
||||
e_hints_window_state_update(bd, e->state[i], e->action);
|
||||
return 1;
|
||||
|
|
|
@ -186,10 +186,10 @@ struct _E_Border
|
|||
unsigned char iconic : 1;
|
||||
unsigned char sticky : 1;
|
||||
unsigned char shaped : 1;
|
||||
unsigned char hidden : 1;
|
||||
unsigned char need_shape_merge : 1;
|
||||
unsigned char need_shape_export : 1;
|
||||
unsigned char fullscreen : 1;
|
||||
unsigned char already_unparented : 1;
|
||||
|
||||
unsigned char changed : 1;
|
||||
|
||||
|
|
|
@ -70,8 +70,7 @@ e_desk_show(E_Desk *desk)
|
|||
{
|
||||
E_Border *bd = l->data;
|
||||
|
||||
if ((bd->desk->zone == desk->zone) && (!bd->iconic) &&
|
||||
(!bd->hidden))
|
||||
if ((bd->desk->zone == desk->zone) && (!bd->iconic))
|
||||
{
|
||||
if ((bd->desk == desk) || (bd->sticky))
|
||||
e_border_show(bd);
|
||||
|
|
|
@ -156,10 +156,6 @@ e_manager_manage_windows(E_Manager *man)
|
|||
deskxy[0],
|
||||
deskxy[1]);
|
||||
|
||||
ret = ecore_x_window_prop_card32_get(windows[i],
|
||||
E_ATOM_HIDDEN,
|
||||
&ret_val, 1);
|
||||
if (!((ret == 1) && (ret_val)))
|
||||
{
|
||||
bd = e_border_new(con, windows[i], 1);
|
||||
if (bd)
|
||||
|
@ -430,18 +426,27 @@ _e_manager_cb_window_show_request(void *data, int ev_type __UNUSED__, void *ev)
|
|||
|
||||
man = data;
|
||||
e = ev;
|
||||
if (e->parent != man->root) return 1; /* try other handlers for this */
|
||||
printf("show req %x / %x\n", e->win, e->parent);
|
||||
#if 0
|
||||
if (e->parent != man->root)
|
||||
return 1; /* try other handlers for this */
|
||||
#endif
|
||||
if (ecore_x_window_parent_get(e->win) != man->root)
|
||||
return 1; /* try other handlers for this */
|
||||
|
||||
{
|
||||
E_Container *con;
|
||||
E_Border *bd;
|
||||
|
||||
printf("werdup\n");
|
||||
con = e_container_current_get(man);
|
||||
if (!e_border_find_by_client_window(e->win))
|
||||
{
|
||||
printf("SHOW REQ %x\n", e->win);
|
||||
bd = e_border_new(con, e->win, 0);
|
||||
if (bd)
|
||||
{
|
||||
printf("BD! %x\n", bd->win);
|
||||
e_border_raise(bd);
|
||||
e_border_show(bd);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue