From 22d7cdc7c2d6e5d5181913cd129cee95d43aba96 Mon Sep 17 00:00:00 2001 From: sebastid Date: Fri, 3 Jun 2005 19:10:25 +0000 Subject: [PATCH] More netwm SVN revision: 15103 --- netwm.txt | 4 +-- src/bin/e_border.c | 19 +++++++-------- src/bin/e_error.c | 4 +-- src/bin/e_hints.c | 6 ++++- src/bin/e_manager.c | 59 +++++++++++++++++++++++++++++++-------------- src/bin/e_utils.c | 2 +- 6 files changed, 60 insertions(+), 34 deletions(-) diff --git a/netwm.txt b/netwm.txt index 9c3d318e4..511f16692 100644 --- a/netwm.txt +++ b/netwm.txt @@ -23,7 +23,7 @@ _NET_DESKTOP_VIEWPORT [P] _NET_FRAME_EXTENTS [X] _NET_MOVERESIZE_WINDOW [P] _NET_NUMBER_OF_DESKTOPS [P] -_NET_REQUEST_FRAME_EXTENTS [ ] +_NET_REQUEST_FRAME_EXTENTS [X] _NET_RESTACK_WINDOW [P] _NET_SHOWING_DESKTOP [ ] _NET_SUPPORTED [X] @@ -84,4 +84,4 @@ _NET_WM_WINDOW_TYPE_UTILITY [X] _NET_WM_WINDOW_TYPE_SPLASH [X] _NET_WM_WINDOW_TYPE_DIALOG [X] _NET_WM_WINDOW_TYPE_NORMAL [X] -_NET_WORKAREA [X] +_NET_WORKAREA [ ] diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 663cdd2f2..78894339d 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -1451,16 +1451,7 @@ e_border_icon_add(E_Border *bd, Evas *evas) Evas_Object *o; o = NULL; - if (bd->client.netwm.icon.data) - { - printf("icon size: %d %d\n", bd->client.netwm.icon.width, bd->client.netwm.icon.height); - o = e_icon_add(evas); - e_icon_data_set(o, bd->client.netwm.icon.data, - bd->client.netwm.icon.width, - bd->client.netwm.icon.height); - e_icon_alpha_set(o, 1); - } - else if ((bd->client.icccm.name) && (bd->client.icccm.class)) + if ((bd->client.icccm.name) && (bd->client.icccm.class)) { E_App *a; @@ -1472,6 +1463,14 @@ e_border_icon_add(E_Border *bd, Evas *evas) edje_object_file_set(o, a->path, "icon"); } } + else if (bd->client.netwm.icon.data) + { + o = e_icon_add(evas); + e_icon_data_set(o, bd->client.netwm.icon.data, + bd->client.netwm.icon.width, + bd->client.netwm.icon.height); + e_icon_alpha_set(o, 1); + } return o; } diff --git a/src/bin/e_error.c b/src/bin/e_error.c index c24b650b1..72b0d8d21 100644 --- a/src/bin/e_error.c +++ b/src/bin/e_error.c @@ -235,7 +235,7 @@ e_error_message_manager_show(E_Manager *man, char *title, char *txt) x = (man->w - error_w) / 2; y = (man->h - error_h) / 2; - con = e_manager_container_current_get(man); + con = e_container_current_get(man); if (con) { E_Zone *zone; @@ -322,7 +322,7 @@ e_error_message_manager_show(E_Manager *man, char *title, char *txt) x = (man->w - error_w) / 2; y = (man->h - error_h) / 2; - con = e_manager_container_current_get(man); + con = e_container_current_get(man); if (con) { E_Zone *zone; diff --git a/src/bin/e_hints.c b/src/bin/e_hints.c index 5ad60b73d..e9c4ba1c9 100644 --- a/src/bin/e_hints.c +++ b/src/bin/e_hints.c @@ -44,6 +44,7 @@ e_hints_init(void) ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLIENT_LIST_STACKING, 1); ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_FRAME_EXTENTS, 1); + ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS, 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); @@ -114,7 +115,7 @@ e_hints_manager_init(E_Manager *man) /* Set desktop count, desktop names and workarea */ int i = 0, num = 0; unsigned int *areas = NULL; - Evas_List *ml, *cl; + Evas_List *cl; Ecore_X_Window *vroots = NULL; /* FIXME: Desktop names not yet implemented */ /* char **names; */ @@ -154,7 +155,10 @@ e_hints_manager_init(E_Manager *man) { ecore_x_netwm_desk_roots_set(man->root, num, vroots); } +#if 0 + /* No need for workarea without desktops */ ecore_x_netwm_desk_workareas_set(man->root, num, areas); +#endif free(vroots); free(areas); diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c index 7153f703f..95f68e150 100644 --- a/src/bin/e_manager.c +++ b/src/bin/e_manager.c @@ -9,6 +9,7 @@ static void _e_manager_free(E_Manager *man); static int _e_manager_cb_window_show_request(void *data, int ev_type, void *ev); static int _e_manager_cb_window_configure(void *data, int ev_type, void *ev); static int _e_manager_cb_key_down(void *data, int ev_type, void *ev); +static int _e_manager_cb_frame_extents_request(void *data, int ev_type, void *ev); #if 0 /* use later - maybe */ static int _e_manager_cb_window_destroy(void *data, int ev_type, void *ev); static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev); @@ -93,6 +94,8 @@ e_manager_new(Ecore_X_Window root) if (h) man->handlers = evas_list_append(man->handlers, h); h = ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, _e_manager_cb_key_down, man); if (h) man->handlers = evas_list_append(man->handlers, h); + h = ecore_event_handler_add(ECORE_X_EVENT_FRAME_EXTENTS_REQUEST, _e_manager_cb_frame_extents_request, man); + if (h) man->handlers = evas_list_append(man->handlers, h); return man; } @@ -138,18 +141,14 @@ e_manager_manage_windows(E_Manager *man) &id, 1); if (ret == 1) con = e_manager_container_number_get(man, id); - else - con = e_manager_container_current_get(man); if (!con) - e_container_current_get(man); + con = e_container_current_get(man); ret = ecore_x_window_prop_card32_get(windows[i], E_ATOM_ZONE, &id, 1); if (ret == 1) zone = e_container_zone_number_get(con, id); - else - zone = e_zone_current_get(con); if (!zone) zone = e_zone_current_get(con); ret = ecore_x_window_prop_card32_get(windows[i], @@ -179,7 +178,7 @@ e_manager_manage_windows(E_Manager *man) * should be seen */ E_Container *con; E_Border *bd; - con = e_manager_container_current_get(man); + con = e_container_current_get(man); bd = e_border_new(con, windows[i], 1); if (bd) e_border_show(bd); @@ -338,18 +337,6 @@ e_manager_lower(E_Manager *man) ecore_x_window_lower(man->win); } -E_Container * -e_manager_container_current_get(E_Manager *man) -{ - /* FIXME - * Currently only one container, but... - */ - E_OBJECT_CHECK_RETURN(man, NULL); - E_OBJECT_TYPE_CHECK_RETURN(man, E_MANAGER_TYPE, NULL); - - return (E_Container *)man->containers->data; -} - E_Container * e_manager_container_number_get(E_Manager *man, int num) { @@ -486,6 +473,42 @@ _e_manager_cb_key_down(void *data, int ev_type __UNUSED__, void *ev) return 1; } +static int +_e_manager_cb_frame_extents_request(void *data, int ev_type __UNUSED__, void *ev) +{ + E_Manager *man; + E_Container *con; + Ecore_X_Event_Frame_Extents_Request *e; + Evas_Object *o; + int ok; + + man = data; + con = e_container_current_get(man); + e = ev; + + if (ecore_x_window_parent_get(e->win) != man->root) return 1; + + o = edje_object_add(con->bg_evas); + ok = e_theme_edje_object_set(o, "base/theme/borders", "widgets/border/default/border"); + if (ok) + { + Evas_Coord x, y, w, h; + int l, r, t, b; + + evas_object_resize(o, 1000, 1000); + edje_object_calc_force(o); + edje_object_part_geometry_get(o, "client", &x, &y, &w, &h); + l = x; + r = 1000 - (x + w); + t = y; + b = 1000 - (y + h); + + ecore_x_netwm_frame_size_set(e->win, l, r, t, b); + } + + return 1; +} + #if 0 /* use later - maybe */ static int _e_manager_cb_window_destroy(void *data, int ev_type, void *ev){return 1;} static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev){return 1;} diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c index dcb1eafd4..1f5ad6d9e 100644 --- a/src/bin/e_utils.c +++ b/src/bin/e_utils.c @@ -81,7 +81,7 @@ e_util_zone_current_get(E_Manager *man) { E_Container *con; - con = e_manager_container_current_get(man); + con = e_container_current_get(man); if (con) { E_Zone *zone;