More netwm

SVN revision: 15103
This commit is contained in:
sebastid 2005-06-03 19:10:25 +00:00 committed by sebastid
parent 82f67c7719
commit 22d7cdc7c2
6 changed files with 60 additions and 34 deletions

View File

@ -23,7 +23,7 @@ _NET_DESKTOP_VIEWPORT [P]
_NET_FRAME_EXTENTS [X] _NET_FRAME_EXTENTS [X]
_NET_MOVERESIZE_WINDOW [P] _NET_MOVERESIZE_WINDOW [P]
_NET_NUMBER_OF_DESKTOPS [P] _NET_NUMBER_OF_DESKTOPS [P]
_NET_REQUEST_FRAME_EXTENTS [ ] _NET_REQUEST_FRAME_EXTENTS [X]
_NET_RESTACK_WINDOW [P] _NET_RESTACK_WINDOW [P]
_NET_SHOWING_DESKTOP [ ] _NET_SHOWING_DESKTOP [ ]
_NET_SUPPORTED [X] _NET_SUPPORTED [X]
@ -84,4 +84,4 @@ _NET_WM_WINDOW_TYPE_UTILITY [X]
_NET_WM_WINDOW_TYPE_SPLASH [X] _NET_WM_WINDOW_TYPE_SPLASH [X]
_NET_WM_WINDOW_TYPE_DIALOG [X] _NET_WM_WINDOW_TYPE_DIALOG [X]
_NET_WM_WINDOW_TYPE_NORMAL [X] _NET_WM_WINDOW_TYPE_NORMAL [X]
_NET_WORKAREA [X] _NET_WORKAREA [ ]

View File

@ -1451,16 +1451,7 @@ e_border_icon_add(E_Border *bd, Evas *evas)
Evas_Object *o; Evas_Object *o;
o = NULL; o = NULL;
if (bd->client.netwm.icon.data) if ((bd->client.icccm.name) && (bd->client.icccm.class))
{
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))
{ {
E_App *a; E_App *a;
@ -1472,6 +1463,14 @@ e_border_icon_add(E_Border *bd, Evas *evas)
edje_object_file_set(o, a->path, "icon"); 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; return o;
} }

View File

@ -235,7 +235,7 @@ e_error_message_manager_show(E_Manager *man, char *title, char *txt)
x = (man->w - error_w) / 2; x = (man->w - error_w) / 2;
y = (man->h - error_h) / 2; y = (man->h - error_h) / 2;
con = e_manager_container_current_get(man); con = e_container_current_get(man);
if (con) if (con)
{ {
E_Zone *zone; 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; x = (man->w - error_w) / 2;
y = (man->h - error_h) / 2; y = (man->h - error_h) / 2;
con = e_manager_container_current_get(man); con = e_container_current_get(man);
if (con) if (con)
{ {
E_Zone *zone; E_Zone *zone;

View File

@ -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_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_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_SUPPORTED, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK, 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 */ /* Set desktop count, desktop names and workarea */
int i = 0, num = 0; int i = 0, num = 0;
unsigned int *areas = NULL; unsigned int *areas = NULL;
Evas_List *ml, *cl; Evas_List *cl;
Ecore_X_Window *vroots = NULL; Ecore_X_Window *vroots = NULL;
/* FIXME: Desktop names not yet implemented */ /* FIXME: Desktop names not yet implemented */
/* char **names; */ /* char **names; */
@ -154,7 +155,10 @@ e_hints_manager_init(E_Manager *man)
{ {
ecore_x_netwm_desk_roots_set(man->root, num, vroots); 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); ecore_x_netwm_desk_workareas_set(man->root, num, areas);
#endif
free(vroots); free(vroots);
free(areas); free(areas);

View File

@ -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_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_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_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 */ #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_destroy(void *data, int ev_type, void *ev);
static int _e_manager_cb_window_hide(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); 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); 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); 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; return man;
} }
@ -138,18 +141,14 @@ e_manager_manage_windows(E_Manager *man)
&id, 1); &id, 1);
if (ret == 1) if (ret == 1)
con = e_manager_container_number_get(man, id); con = e_manager_container_number_get(man, id);
else
con = e_manager_container_current_get(man);
if (!con) if (!con)
e_container_current_get(man); con = e_container_current_get(man);
ret = ecore_x_window_prop_card32_get(windows[i], ret = ecore_x_window_prop_card32_get(windows[i],
E_ATOM_ZONE, E_ATOM_ZONE,
&id, 1); &id, 1);
if (ret == 1) if (ret == 1)
zone = e_container_zone_number_get(con, id); zone = e_container_zone_number_get(con, id);
else
zone = e_zone_current_get(con);
if (!zone) if (!zone)
zone = e_zone_current_get(con); zone = e_zone_current_get(con);
ret = ecore_x_window_prop_card32_get(windows[i], ret = ecore_x_window_prop_card32_get(windows[i],
@ -179,7 +178,7 @@ e_manager_manage_windows(E_Manager *man)
* should be seen */ * should be seen */
E_Container *con; E_Container *con;
E_Border *bd; E_Border *bd;
con = e_manager_container_current_get(man); con = e_container_current_get(man);
bd = e_border_new(con, windows[i], 1); bd = e_border_new(con, windows[i], 1);
if (bd) if (bd)
e_border_show(bd); e_border_show(bd);
@ -338,18 +337,6 @@ e_manager_lower(E_Manager *man)
ecore_x_window_lower(man->win); 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_Container *
e_manager_container_number_get(E_Manager *man, int num) 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; 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 */ #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_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;} static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev){return 1;}

View File

@ -81,7 +81,7 @@ e_util_zone_current_get(E_Manager *man)
{ {
E_Container *con; E_Container *con;
con = e_manager_container_current_get(man); con = e_container_current_get(man);
if (con) if (con)
{ {
E_Zone *zone; E_Zone *zone;