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_int_menus.c e_manager.c Log Message: Clean up icccm and netwm stuff =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.229 retrieving revision 1.230 diff -u -3 -r1.229 -r1.230 --- e_border.c 28 May 2005 13:22:14 -0000 1.229 +++ e_border.c 29 May 2005 11:37:17 -0000 1.230 @@ -272,10 +272,10 @@ bd->client.win = win; - bd->client.icccm.title = strdup(""); + bd->client.icccm.title = NULL; bd->client.icccm.name = strdup(""); bd->client.icccm.class = strdup(""); - bd->client.icccm.icon_name = strdup(""); + bd->client.icccm.icon_name = NULL; bd->client.icccm.machine = strdup(""); bd->client.icccm.min_w = 1; bd->client.icccm.min_h = 1; @@ -289,6 +289,22 @@ bd->client.icccm.max_aspect = 0.0; bd->client.icccm.accepts_focus = 1; + bd->client.netwm.pid = 0; + bd->client.netwm.name = NULL; + bd->client.netwm.icon_name = NULL; + bd->client.netwm.desktop = 0; + bd->client.netwm.state.modal = 0; + bd->client.netwm.state.sticky = 0; + bd->client.netwm.state.shaded = 0; + bd->client.netwm.state.hidden = 0; + bd->client.netwm.state.maximized_v = 0; + bd->client.netwm.state.maximized_h = 0; + bd->client.netwm.state.skip_taskbar = 0; + bd->client.netwm.state.skip_pager = 0; + bd->client.netwm.state.fullscreen = 0; + bd->client.netwm.state.stacking = E_STACKING_NONE; + bd->client.netwm.type = ECORE_X_WINDOW_TYPE_NORMAL; + { int at_num = 0, i; Ecore_X_Atom *atoms; @@ -296,6 +312,7 @@ atoms = ecore_x_window_prop_list(bd->client.win, &at_num); if (atoms) { + /* icccm */ for (i = 0; i < at_num; i++) { if (atoms[i] == ECORE_X_ATOM_WM_NAME) @@ -319,6 +336,23 @@ else if (atoms[i] == ECORE_X_ATOM_WM_WINDOW_ROLE) bd->client.icccm.fetch.window_role = 1; } + /* netwm, loop again, netwm will ignore some icccm, so we + * have to be sure that netwm is checked after */ + for (i = 0; i < at_num; i++) + { + if (atoms[i] == ECORE_X_ATOM_NET_WM_NAME) + { + /* Ignore icccm */ + bd->client.icccm.fetch.title = 0; + bd->client.netwm.fetch.name = 1; + } + else if (atoms[i] == ECORE_X_ATOM_NET_WM_ICON_NAME) + { + /* Ignore icccm */ + bd->client.icccm.fetch.icon_name = 0; + bd->client.netwm.fetch.icon_name = 1; + } + } free(atoms); } } @@ -334,21 +368,6 @@ */ bd->client.border.changed = 1; - /* FIXME; set fetch flags as above */ - bd->client.netwm.pid = 0; - bd->client.netwm.desktop = 0; - bd->client.netwm.state.modal = 0; - bd->client.netwm.state.sticky = 0; - bd->client.netwm.state.shaded = 0; - bd->client.netwm.state.hidden = 0; - bd->client.netwm.state.maximized_v = 0; - bd->client.netwm.state.maximized_h = 0; - bd->client.netwm.state.skip_taskbar = 0; - bd->client.netwm.state.skip_pager = 0; - bd->client.netwm.state.fullscreen = 0; - bd->client.netwm.state.stacking = E_STACKING_NONE; - bd->client.netwm.type = ECORE_X_WINDOW_TYPE_NORMAL; - bd->client.w = att->w; bd->client.h = att->h; @@ -1839,7 +1858,16 @@ if (!bd) return 1; if (e->atom == ECORE_X_ATOM_WM_NAME) { - bd->client.icccm.fetch.title = 1; + if ((!bd->client.netwm.name) && + (!bd->client.netwm.fetch.name)) + { + bd->client.icccm.fetch.title = 1; + bd->changed = 1; + } + } + else if (e->atom == ECORE_X_ATOM_NET_WM_NAME) + { + bd->client.netwm.fetch.name = 1; bd->changed = 1; } else if (e->atom == ECORE_X_ATOM_WM_CLASS) @@ -1849,7 +1877,16 @@ } else if (e->atom == ECORE_X_ATOM_WM_ICON_NAME) { - bd->client.icccm.fetch.icon_name = 1; + if ((!bd->client.netwm.icon_name) && + (!bd->client.netwm.fetch.icon_name)) + { + bd->client.icccm.fetch.icon_name = 1; + bd->changed = 1; + } + } + else if (e->atom == ECORE_X_ATOM_NET_WM_ICON_NAME) + { + bd->client.netwm.fetch.icon_name = 1; bd->changed = 1; } else if (e->atom == ECORE_X_ATOM_WM_CLIENT_MACHINE) @@ -2774,14 +2811,26 @@ /* fetch any info queued to be fetched */ if (bd->client.icccm.fetch.title) { - e_hints_window_name_get(bd); + if (bd->client.icccm.title) free(bd->client.icccm.title); + bd->client.icccm.title = ecore_x_icccm_title_get(bd->client.win); + bd->client.icccm.fetch.title = 0; if (bd->bg_object) { edje_object_part_text_set(bd->bg_object, "title_text", -// "Japanese (hiragana): いろはにほへとちりぬるを"); bd->client.icccm.title); -// printf("SET TITLE %s\n", bd->client.icccm.title); + } + } + if (bd->client.netwm.fetch.name) + { + if (bd->client.netwm.name) free(bd->client.netwm.name); + bd->client.netwm.name = ecore_x_netwm_name_get(bd->client.win); + + bd->client.netwm.fetch.name = 0; + if (bd->bg_object) + { + edje_object_part_text_set(bd->bg_object, "title_text", + bd->client.netwm.name); } } if (bd->client.icccm.fetch.name_class) @@ -2852,9 +2901,18 @@ } if (bd->client.icccm.fetch.icon_name) { - e_hints_window_icon_name_get(bd); + if (bd->client.icccm.icon_name) free(bd->client.icccm.icon_name); + bd->client.icccm.icon_name = ecore_x_icccm_icon_name_get(bd->client.win); + bd->client.icccm.fetch.icon_name = 0; } + if (bd->client.netwm.fetch.icon_name) + { + if (bd->client.netwm.icon_name) free(bd->client.netwm.icon_name); + bd->client.netwm.icon_name = ecore_x_netwm_icon_name_get(bd->client.win); + + bd->client.netwm.fetch.icon_name = 0; + } if (bd->client.icccm.fetch.machine) { if (bd->client.icccm.machine) free(bd->client.icccm.machine); @@ -3082,10 +3140,12 @@ } } - edje_object_part_text_set(o, "title_text", -// "Japanese (hiragana): いろはにほへとちりぬるを"); - bd->client.icccm.title); -// printf("SET TITLE2 %s\n", bd->client.icccm.title); + if (bd->client.netwm.name) + edje_object_part_text_set(o, "title_text", + bd->client.netwm.name); + else if (bd->client.icccm.title) + edje_object_part_text_set(o, "title_text", + bd->client.icccm.title); evas_object_resize(o, 1000, 1000); edje_object_calc_force(o); edje_object_part_geometry_get(o, "client", &cx, &cy, &cw, &ch); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v retrieving revision 1.61 retrieving revision 1.62 diff -u -3 -r1.61 -r1.62 --- e_border.h 28 May 2005 13:22:15 -0000 1.61 +++ e_border.h 29 May 2005 11:37:18 -0000 1.62 @@ -158,9 +158,10 @@ } fetch; } mwm; struct { - /* FIXME: add name field */ pid_t pid; unsigned int desktop; + char *name; + char *icon_name; /* NetWM Window state */ struct { @@ -180,11 +181,19 @@ struct { unsigned char name : 1; + /* No, fetch on new_client, shouldn't be changed after map. unsigned char pid : 1; + */ + /* No, ignore this unsigned char desktop : 1; + */ + /* No, fetch on new_client, shouldn't be changed after map. unsigned char type : 1; + */ unsigned char icon_name : 1; + /* No, don't fetch state, update on client message unsigned char state : 1; + */ } fetch; } netwm; Ecore_X_Window_Attributes initial_attributes; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.c,v retrieving revision 1.61 retrieving revision 1.62 diff -u -3 -r1.61 -r1.62 --- e_container.c 26 May 2005 15:30:10 -0000 1.61 +++ e_container.c 29 May 2005 11:37:18 -0000 1.62 @@ -58,6 +58,7 @@ { con->win = ecore_x_window_override_new(con->manager->win, con->x, con->y, con->w, con->h); ecore_x_icccm_title_set(con->win, "Enlightenment Container"); + ecore_x_netwm_name_set(con->win, "Enlightenment Container"); ecore_x_window_raise(con->win); } else =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- e_hints.c 29 May 2005 11:06:11 -0000 1.38 +++ e_hints.c 29 May 2005 11:37:18 -0000 1.39 @@ -235,30 +235,6 @@ } void -e_hints_window_name_set(E_Border *bd) -{ - ecore_x_icccm_title_set(bd->client.win, bd->client.icccm.title); - ecore_x_netwm_name_set(bd->client.win, bd->client.icccm.title); -} - -void -e_hints_window_name_get(E_Border *bd) -{ - /* FIXME: only call from border_eval() if fetch flag set */ - /* FIXME: split name into icccm and netwm name - prefer netwm name */ - /* if its not NULL */ - char *name; - - name = ecore_x_netwm_name_get(bd->client.win); - if (!name) - name = ecore_x_icccm_title_get(bd->client.win); - if (!name) - name = strdup("No name!!"); - if (bd->client.icccm.title) free(bd->client.icccm.title); - bd->client.icccm.title = name; -} - -void e_hints_desktop_config_set(void) { /* Set desktop count, desktop names and workarea */ @@ -905,7 +881,7 @@ } } - void +void e_hints_window_visible_set(E_Border *bd) { if (bd->client.icccm.state != ECORE_X_WINDOW_STATE_HINT_NORMAL) @@ -920,7 +896,7 @@ } } - void +void e_hints_window_iconic_set(E_Border *bd) { if (bd->client.icccm.state != ECORE_X_WINDOW_STATE_HINT_ICONIC) @@ -935,7 +911,7 @@ } } - void +void e_hints_window_hidden_set(E_Border *bd) { if (bd->client.icccm.state != ECORE_X_WINDOW_STATE_HINT_ICONIC) @@ -950,7 +926,7 @@ } } - void +void e_hints_window_shaded_set(E_Border *bd, int on) { if ((!bd->client.netwm.state.shaded) && (on)) @@ -965,13 +941,13 @@ } } - void +void e_hints_window_shade_direction_set(E_Border *bd, E_Direction dir) { ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_SHADE_DIRECTION, &dir, 1); } - E_Direction +E_Direction e_hints_window_shade_direction_get(E_Border *bd) { int ret; @@ -986,7 +962,7 @@ return E_DIRECTION_UP; } - void +void e_hints_window_maximized_set(E_Border *bd, int on) { if ((!bd->client.netwm.state.maximized_v) && (on)) @@ -1011,7 +987,7 @@ } } - void +void e_hints_window_fullscreen_set(E_Border *bd, int on) { if ((!bd->client.netwm.state.fullscreen) && (on)) @@ -1026,7 +1002,7 @@ } } - void +void e_hints_window_sticky_set(E_Border *bd, int on) { if ((!bd->client.netwm.state.sticky) && (on)) @@ -1041,7 +1017,7 @@ } } - void +void e_hints_window_stacking_set(E_Border *bd, E_Stacking stacking) { if (bd->client.netwm.state.stacking == stacking) return; @@ -1070,24 +1046,7 @@ ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_SKIP_PAGER, on); */ - void -e_hints_window_icon_name_get(E_Border *bd) -{ - char *name; - - if (bd->client.icccm.icon_name) free(bd->client.icccm.icon_name); - - name = ecore_x_netwm_icon_name_get(bd->client.win); - if (!name) - name = ecore_x_icccm_icon_name_get(bd->client.win); - if (!name) - name = strdup(""); - - bd->client.icccm.icon_name = name; - bd->changed = 1; -} - - void +void e_hints_window_desktop_set(E_Border *bd) { unsigned int deskpos[2]; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- e_hints.h 20 May 2005 05:13:45 -0000 1.15 +++ e_hints.h 29 May 2005 11:37:18 -0000 1.16 @@ -14,9 +14,6 @@ EAPI void e_hints_active_window_set(E_Manager *man, E_Border *bd); -EAPI void e_hints_window_name_set(E_Border *bd); -EAPI void e_hints_window_name_get(E_Border *bd); - EAPI void e_hints_desktop_config_set(void); EAPI void e_hints_window_init(E_Border *bd); @@ -41,8 +38,6 @@ EAPI void e_hints_window_sticky_set(E_Border *bd, int on); 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 =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v retrieving revision 1.62 retrieving revision 1.63 diff -u -3 -r1.62 -r1.63 --- e_int_menus.c 26 May 2005 12:38:53 -0000 1.62 +++ e_int_menus.c 29 May 2005 11:37:18 -0000 1.63 @@ -484,7 +484,12 @@ mi = e_menu_item_new(m); e_menu_item_check_set(mi, 1); - e_menu_item_label_set(mi, bd->client.icccm.title); + if (bd->client.netwm.name) + e_menu_item_label_set(mi, bd->client.netwm.name); + else if (bd->client.icccm.title) + e_menu_item_label_set(mi, bd->client.icccm.title); + else + e_menu_item_label_set(mi, "No name!!"); /* ref the border as we implicitly unref it in the callback */ e_object_ref(E_OBJECT(bd)); e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_manager.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- e_manager.c 20 May 2005 03:09:44 -0000 1.27 +++ e_manager.c 29 May 2005 11:37:18 -0000 1.28 @@ -71,6 +71,7 @@ man->win = ecore_x_window_override_new(man->root, man->x, man->y, man->w, man->h); ecore_x_icccm_title_set(man->win, "Enlightenment Manager"); + ecore_x_netwm_name_set(man->win, "Enlightenment Manager"); mwin = e_menu_grab_window_get(); if (!mwin) mwin = e_init_window_get(); if (!mwin) ------------------------------------------------------- This SF.Net email is sponsored by Yahoo. Introducing Yahoo! Search Developer Network - Create apps using Yahoo! Search APIs Find out how you can build Yahoo! directly into your own Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs