Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_border.c e_border.h e_container.c e_hints.c e_hints.h e_main.c Log Message: netwm updates. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.205 retrieving revision 1.206 diff -u -3 -r1.205 -r1.206 --- e_border.c 16 May 2005 10:46:01 -0000 1.205 +++ e_border.c 16 May 2005 15:43:08 -0000 1.206 @@ -37,6 +37,7 @@ static int _e_border_cb_window_focus_in(void *data, int ev_type, void *ev); static int _e_border_cb_window_focus_out(void *data, int ev_type, void *ev); static int _e_border_cb_window_state(void *data, int ev_type, void *ev); +static int _e_border_cb_desktop_change(void *data, int ev_type, void *ev); static int _e_border_cb_client_message(void *data, int ev_type, void *ev); static void _e_border_cb_signal_move_start(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -159,6 +160,7 @@ handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _e_border_cb_window_focus_in, NULL)); handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _e_border_cb_window_focus_out, NULL)); handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_STATE, _e_border_cb_window_state, NULL)); + handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_DESKTOP_CHANGE, _e_border_cb_desktop_change, NULL)); handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _e_border_cb_client_message, NULL)); ecore_x_passive_grab_replay_func_set(_e_border_cb_grab_replay, NULL); @@ -291,8 +293,6 @@ bd->client.icccm.fetch.size_pos_hints = 1; bd->client.icccm.fetch.protocol = 1; bd->client.mwm.fetch.hints = 1; - bd->client.netwm.fetch.pid = 1; - bd->client.netwm.fetch.desktop = 1; bd->client.border.changed = 1; bd->client.w = att->w; @@ -379,8 +379,6 @@ e_border_desk_set(E_Border *bd, E_Desk *desk) { E_Event_Border_Desk_Set *ev; - int deskx, desky; - unsigned int deskpos[2]; E_OBJECT_CHECK(bd); E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE); @@ -390,17 +388,14 @@ bd->desk = desk; e_border_zone_set(bd, desk->zone); + e_hints_window_desktop_set(bd); + ev = calloc(1, sizeof(E_Event_Border_Desk_Set)); ev->border = bd; e_object_ref(E_OBJECT(bd)); ev->desk = desk; e_object_ref(E_OBJECT(desk)); ecore_event_add(E_EVENT_BORDER_DESK_SET, ev, _e_border_event_border_desk_set_free, NULL); - - e_desk_xy_get(desk, &deskx, &desky); - deskpos[0] = deskx; - deskpos[1] = desky; - ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_DESK, deskpos, 2); } void @@ -1789,17 +1784,6 @@ bd->client.mwm.fetch.hints = 1; bd->changed = 1; } - else if (e->atom == ECORE_X_ATOM_NET_WM_PID) - { - bd->client.netwm.fetch.pid = 1; - bd->changed = 1; - } - else if (e->atom == ECORE_X_ATOM_NET_WM_DESKTOP) - { - bd->client.netwm.fetch.desktop = 1; - bd->changed = 1; - } -// bd->client.border.changed = 1; return 1; } @@ -1967,7 +1951,12 @@ e = ev; bd = e_border_find_by_client_window(e->win); - if (!bd) + if (bd) + { + for (i = 0; i < 2; i++) + e_hints_window_state_update(bd, e->state[i], e->action); + } + else { for (i = 0; i < 2; i++) { @@ -2005,10 +1994,37 @@ } } } + return 1; +} + +static int +_e_border_cb_desktop_change(void *data, int ev_type, void *ev) +{ + E_Border *bd; + Ecore_X_Event_Desktop_Change *e; + + e = ev; + if (e->desk < 0) return 1; + bd = e_border_find_by_client_window(e->win); + if (bd) + { + if (bd->client.netwm.desktop == 0xffffffff) + e_border_stick(bd); + else if (e->desk < (bd->zone->desk_x_count * bd->zone->desk_y_count)) + { + E_Desk *desk; + int x, y; + + y = e->desk / bd->zone->desk_x_count; + x = e->desk - (y * bd->zone->desk_x_count); + + desk = e_desk_at_xy_get(bd->zone, x, y); + e_border_desk_set(bd, desk); + } + } else { - for (i = 0; i < 2; i++) - e_hints_window_state_update(bd, e->state[i], e->action); + ecore_x_netwm_desktop_set(e->win, e->desk); } return 1; } @@ -2839,18 +2855,6 @@ } bd->client.mwm.fetch.hints = 0; } - if (bd->client.netwm.fetch.pid) - { - if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid)) - bd->client.netwm.pid = -1; - bd->client.netwm.fetch.pid = 0; - } - if (bd->client.netwm.fetch.desktop) - { - if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop)) - bd->client.netwm.desktop = -1; - bd->client.netwm.fetch.desktop = 0; - } if (bd->changes.shape) { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v retrieving revision 1.52 retrieving revision 1.53 diff -u -3 -r1.52 -r1.53 --- e_border.h 13 May 2005 21:19:04 -0000 1.52 +++ e_border.h 16 May 2005 15:43:09 -0000 1.53 @@ -148,11 +148,7 @@ struct { pid_t pid; unsigned int desktop; - struct { - unsigned int pid : 1; - unsigned int desktop : 1; - } fetch; - + /* NetWM Window state */ struct { unsigned char modal : 1; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -3 -r1.52 -r1.53 --- e_container.c 13 May 2005 18:56:03 -0000 1.52 +++ e_container.c 16 May 2005 15:43:09 -0000 1.53 @@ -592,6 +592,7 @@ 0, 0, 0, 0, 0, con->layers[pos].win, ECORE_X_WINDOW_STACK_ABOVE); } + void e_container_border_raise(E_Border *bd) { @@ -620,6 +621,8 @@ bd->zone->container->layers[pos - 1].clients = evas_list_append(bd->zone->container->layers[pos - 1].clients, bd); + + e_hints_client_stacking_set(); } void @@ -650,6 +653,8 @@ bd->zone->container->layers[pos].clients = evas_list_prepend(bd->zone->container->layers[pos].clients, bd); + + e_hints_client_stacking_set(); } void =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- e_hints.c 16 May 2005 13:19:26 -0000 1.22 +++ e_hints.c 16 May 2005 15:43:09 -0000 1.23 @@ -24,91 +24,33 @@ // on finding this out when it shoudl be irrelevant! stupid FUCKS. ecore_x_netwm_wm_identify(roots[i], win, "KWin"); // ecore_x_netwm_wm_identify(roots[i], win, "Enlightenment"); - /* Set what we support */ + + /* Set what hints we support */ + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_ACTIVE_WINDOW, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLIENT_LIST, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLIENT_LIST_STACKING, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTED, 1); ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK, 1); - /* - ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS; - ECORE_X_ATOM_NET_VIRTUAL_ROOTS; - ECORE_X_ATOM_NET_DESKTOP_NAMES; - ECORE_X_ATOM_NET_DESKTOP_GEOMETRY; - ECORE_X_ATOM_NET_DESKTOP_VIEWPORT; - ECORE_X_ATOM_NET_DESKTOP_LAYOUT; - ECORE_X_ATOM_NET_WORKAREA; - - ECORE_X_ATOM_NET_CURRENT_DESKTOP; - ECORE_X_ATOM_NET_SHOWING_DESKTOP; - - ECORE_X_ATOM_NET_CLIENT_LIST; - ECORE_X_ATOM_NET_CLIENT_LIST_STACKING; - ECORE_X_ATOM_NET_ACTIVE_WINDOW; - - ECORE_X_ATOM_NET_WM_NAME; - ECORE_X_ATOM_NET_WM_VISIBLE_NAME; - ECORE_X_ATOM_NET_WM_ICON_NAME; - ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME; - ECORE_X_ATOM_NET_WM_DESKTOP; - ECORE_X_ATOM_NET_WM_STRUT; - ECORE_X_ATOM_NET_WM_STRUT_PARTIAL; - ECORE_X_ATOM_NET_WM_ICON_GEOMETRY; - ECORE_X_ATOM_NET_WM_ICON; - ECORE_X_ATOM_NET_WM_PID; - ECORE_X_ATOM_NET_WM_HANDLED_ICONS; - ECORE_X_ATOM_NET_WM_USER_TIME; - - ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS; - ECORE_X_ATOM_NET_WM_ACTION_MOVE; - ECORE_X_ATOM_NET_WM_ACTION_RESIZE; - ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE; - ECORE_X_ATOM_NET_WM_ACTION_SHADE; - ECORE_X_ATOM_NET_WM_ACTION_STICK; - ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ; - ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT; - ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN; - ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP; - ECORE_X_ATOM_NET_WM_ACTION_CLOSE; - - ECORE_X_ATOM_NET_WM_WINDOW_TYPE; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG; - ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL; + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_VIRTUAL_ROOTS, 1); + + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_NAME, 1); -*/ ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE, 1); - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MODAL, 1); - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_STICKY, 1); - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT, 1); - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ, 1); - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SHADED, 1); - /* - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR, 1); - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER, 1); - */ - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_HIDDEN, 1); - ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN, 1); ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_ABOVE, 1); ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_BELOW, 1); - /* - ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION; - - ECORE_X_ATOM_NET_WM_WINDOW_OPACITY; - - ECORE_X_ATOM_NET_FRAME_EXTENTS; - ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS; - - ECORE_X_ATOM_NET_WM_PING; - ECORE_X_ATOM_NET_WM_SYNC_REQUEST; - */ + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_HIDDEN, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SHADED, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_STICKY, 1); } free(roots); } } +/* FIXME, this should set the list in map order, not stack order */ void e_hints_client_list_set(void) { @@ -344,7 +286,27 @@ bd->layer = 150; else bd->layer = 100; - e_container_border_raise(bd); + e_border_raise(bd); + + if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop)) + bd->client.netwm.desktop = 0; + if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid)) + bd->client.netwm.pid = -1; + + if (bd->client.netwm.desktop == 0xffffffff) + e_border_stick(bd); + else if ((bd->client.netwm.desktop >= 0) + && (bd->client.netwm.desktop < (bd->zone->desk_x_count * bd->zone->desk_y_count))) + { + E_Desk *desk; + int x, y; + + y = bd->client.netwm.desktop / bd->zone->desk_x_count; + x = bd->client.netwm.desktop - (y * bd->zone->desk_x_count); + + desk = e_desk_at_xy_get(bd->zone, x, y); + e_border_desk_set(bd, desk); + } if (bd->client.netwm.state.sticky) e_border_stick(bd); @@ -360,6 +322,10 @@ * show it! */ else if (bd->desk == e_desk_current_get(bd->zone)) e_border_show(bd); + + /* Update stacking */ + e_hints_client_list_set(); + e_hints_client_stacking_set(); } void @@ -989,7 +955,7 @@ void e_hints_window_icon_name_get(E_Border *bd) { - char *name; + char *name; name = ecore_x_netwm_icon_name_get(bd->client.win); if (bd->client.icccm.icon_name) @@ -997,3 +963,21 @@ bd->client.icccm.icon_name = name; bd->changed = 1; } + +void +e_hints_window_desktop_set(E_Border *bd) +{ + unsigned int deskpos[2]; + unsigned int current; + + current = (bd->desk->y * bd->zone->desk_x_count) + bd->desk->x; + if (bd->client.netwm.desktop != current) + { + deskpos[0] = bd->desk->x; + deskpos[1] = bd->desk->y; + ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_DESK, deskpos, 2); + + ecore_x_netwm_desktop_set(bd->client.win, current); + bd->client.netwm.desktop = current; + } +} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- e_hints.h 10 May 2005 10:11:34 -0000 1.12 +++ e_hints.h 16 May 2005 15:43:09 -0000 1.13 @@ -40,6 +40,8 @@ EAPI void e_hints_window_stacking_set(E_Border *bd, E_Stacking stacking); EAPI void e_hints_window_icon_name_get(E_Border *bd); + +EAPI void e_hints_window_desktop_set(E_Border *bd); #endif #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -3 -r1.78 -r1.79 --- e_main.c 11 May 2005 21:33:54 -0000 1.78 +++ e_main.c 16 May 2005 15:43:15 -0000 1.79 @@ -644,6 +644,11 @@ return 0; } } + + /* Init border stacking */ + e_hints_client_list_set(); + e_hints_client_stacking_set(); + free(roots); ecore_x_sync(); return 1; ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs