_NET_WM_ICON, isn't finished.

SVN revision: 15079
This commit is contained in:
sebastid 2005-06-03 06:43:23 +00:00 committed by sebastid
parent 030eaa7d30
commit a1d592e073
7 changed files with 109 additions and 13 deletions

View File

@ -39,7 +39,7 @@ _NET_WM_ACTION_STICK [ ]
_NET_WM_ALLOWED_ACTIONS [ ]
_NET_WM_DESKTOP [?] /* Remove this property on unmap */
_NET_WM_HANDLED_ICONS [ ]
_NET_WM_ICON [ ]
_NET_WM_ICON [X]
_NET_WM_ICON_GEOMETRY [ ]
_NET_WM_ICON_NAME [X]
_NET_WM_MOVERESIZE [ ]

View File

@ -351,6 +351,10 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
bd->client.icccm.fetch.icon_name = 0;
bd->client.netwm.fetch.icon_name = 1;
}
else if (atoms[i] == ECORE_X_ATOM_NET_WM_ICON)
{
bd->client.netwm.fetch.icon = 1;
}
}
free(atoms);
}
@ -1426,6 +1430,10 @@ e_border_act_kill_begin(E_Border *bd)
e_object_del(E_OBJECT(bd));
}
void e_border_icon_add(E_Border *bd, Evas *e)
{
}
void
e_border_button_bindings_ungrab_all(void)
{
@ -1930,6 +1938,13 @@ _e_border_cb_window_property(void *data, int ev_type, void *ev)
bd->client.icccm.fetch.window_role = 1;
bd->changed = 1;
}
/*
else if (e->atom == ECORE_X_ATOM_NET_WM_ICON)
{
bd->client.netwm.fetch.icon = 1;
bd->changed = 1;
}
*/
return 1;
}
@ -2928,6 +2943,39 @@ _e_border_eval(E_Border *bd)
bd->client.netwm.fetch.icon_name = 0;
}
/*
if (bd->client.netwm.fetch.icon)
{
if (bd->client.netwm.icon.data) free(bd->client.netwm.icon.data);
if (!ecore_x_netwm_icon_get(bd->client.win,
&bd->client.netwm.icon.width, &bd->client.netwm.icon.height,
&bd->client.netwm.icon.data, &bd->client.netwm.icon.size))
printf("ERROR: Fetch icon from client\n");
else
{
if (bd->icon_object)
{
evas_object_del(bd->icon_object);
bd->icon_object = NULL;
}
bd->icon_object = e_icon_add(bd->bg_evas);
e_icon_data_set(bd->icon_object, bd->client.netwm.icon.data,
bd->client.netwm.icon.width, bd->client.netwm.icon.height);
e_icon_alpha_set(bd->icon_object, 1);
if (bd->bg_object)
{
evas_object_show(bd->icon_object);
edje_object_part_swallow(bd->bg_object, "icon_swallow", bd->icon_object);
}
else
{
evas_object_hide(bd->icon_object);
}
}
bd->client.netwm.fetch.icon = 0;
}
*/
if (bd->client.icccm.fetch.machine)
{
if (bd->client.icccm.machine) free(bd->client.icccm.machine);

View File

@ -162,6 +162,12 @@ struct _E_Border
unsigned int desktop;
char *name;
char *icon_name;
struct {
unsigned int *data;
int width;
int height;
int size;
} icon;
/* NetWM Window state */
struct {
@ -181,6 +187,8 @@ struct _E_Border
struct {
unsigned char name : 1;
unsigned char icon_name : 1;
unsigned char icon : 1;
/* No, fetch on new_client, shouldn't be changed after map.
unsigned char pid : 1;
*/
@ -190,7 +198,6 @@ struct _E_Border
/* 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;
*/
@ -401,6 +408,8 @@ EAPI void e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down
EAPI void e_border_act_close_begin(E_Border *bd);
EAPI void e_border_act_kill_begin(E_Border *bd);
EAPI void e_border_icon_add(E_Border *bd, Evas *e);
EAPI void e_border_button_bindings_ungrab_all(void);
EAPI void e_border_button_bindings_grab_all(void);

View File

@ -51,7 +51,12 @@ e_hints_init(void)
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_VIRTUAL_ROOTS, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ICON, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_ICON_NAME, 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_PID, 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_STICKY, 1);
@ -63,6 +68,9 @@ e_hints_init(void)
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_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_VISIBLE_NAME, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP, 1);
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK, 1);

View File

@ -81,6 +81,24 @@ e_icon_smooth_scale_get(Evas_Object *obj)
return evas_object_image_smooth_scale_get(sd->obj);
}
void
e_icon_alpha_set(Evas_Object *obj, int alpha)
{
E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_image_alpha_set(sd->obj, alpha);
}
int
e_icon_alpha_get(Evas_Object *obj)
{
E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
return evas_object_image_alpha_get(sd->obj);
}
void
e_icon_size_get(Evas_Object *obj, int *w, int *h)
{
@ -112,6 +130,16 @@ e_icon_fill_inside_set(Evas_Object *obj, int fill_inside)
_e_icon_smart_reconfigure(sd);
}
void
e_icon_data_set(Evas_Object *obj, void *data, int w, int h)
{
E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_image_size_set(sd->obj, w, h);
evas_object_image_data_copy_set(sd->obj, data);
}
/* local subsystem globals */
static void
_e_icon_smart_reconfigure(E_Smart_Data *sd)

View File

@ -11,9 +11,12 @@ EAPI void e_icon_file_set (Evas_Object *obj, const char *file);
EAPI const char *e_icon_file_get (Evas_Object *obj);
EAPI void e_icon_smooth_scale_set (Evas_Object *obj, int smooth);
EAPI int e_icon_smooth_scale_get (Evas_Object *obj);
EAPI void e_icon_alpha_set (Evas_Object *obj, int smooth);
EAPI int e_icon_alpha_get (Evas_Object *obj);
EAPI void e_icon_size_get (Evas_Object *obj, int *w, int *h);
EAPI int e_icon_fill_inside_get (Evas_Object *obj);
EAPI void e_icon_fill_inside_set (Evas_Object *obj, int fill_inside);
EAPI void e_icon_data_set (Evas_Object *obj, void *data, int w, int h);
#endif
#endif

View File

@ -35,7 +35,7 @@ __e_hack_set_properties(Display *display, Window window)
if (!a_manager) a_manager = XInternAtom(display, "_E_HACK_MANAGER", False);
if ((env = getenv("E_LAUNCH_ID")))
XChangeProperty(display, window, a_launch_id, XA_STRING, 8, PropModeReplace, env, strlen(env));
XChangeProperty(display, window, a_launch_id, XA_STRING, 8, PropModeReplace, (unsigned char *)env, strlen(env));
{
uid_t uid;
pid_t pid, ppid;
@ -47,29 +47,29 @@ __e_hack_set_properties(Display *display, Window window)
ppid = getppid();
snprintf(buf, sizeof(buf), "%i", uid);
XChangeProperty(display, window, a_user_id, XA_STRING, 8, PropModeReplace, buf, strlen(buf));
XChangeProperty(display, window, a_user_id, XA_STRING, 8, PropModeReplace, (unsigned char *)buf, strlen(buf));
snprintf(buf, sizeof(buf), "%i", pid);
XChangeProperty(display, window, a_process_id, XA_STRING, 8, PropModeReplace, buf, strlen(buf));
XChangeProperty(display, window, a_process_id, XA_STRING, 8, PropModeReplace, (unsigned char *)buf, strlen(buf));
snprintf(buf, sizeof(buf), "%i", ppid);
XChangeProperty(display, window, a_p_process_id, XA_STRING, 8, PropModeReplace, buf, strlen(buf));
XChangeProperty(display, window, a_p_process_id, XA_STRING, 8, PropModeReplace, (unsigned char *)buf, strlen(buf));
if (!uname(&ubuf))
{
snprintf(buf, sizeof(buf), "%s", ubuf.nodename);
XChangeProperty(display, window, a_machine_name, XA_STRING, 8, PropModeReplace, buf, strlen(buf));
XChangeProperty(display, window, a_machine_name, XA_STRING, 8, PropModeReplace, (unsigned char *)buf, strlen(buf));
}
else
XChangeProperty(display, window, a_machine_name, XA_STRING, 8, PropModeReplace, " ", 1);
XChangeProperty(display, window, a_machine_name, XA_STRING, 8, PropModeReplace, (unsigned char *)" ", 1);
}
if ((env = getenv("USER")))
XChangeProperty(display, window, a_user_name, XA_STRING, 8, PropModeReplace, env, strlen(env));
XChangeProperty(display, window, a_user_name, XA_STRING, 8, PropModeReplace, (unsigned char *)env, strlen(env));
if ((env = getenv("E_DESK")))
XChangeProperty(display, window, a_desk, XA_STRING, 8, PropModeReplace, env, strlen(env));
XChangeProperty(display, window, a_desk, XA_STRING, 8, PropModeReplace, (unsigned char *)env, strlen(env));
if ((env = getenv("E_ZONE")))
XChangeProperty(display, window, a_zone, XA_STRING, 8, PropModeReplace, env, strlen(env));
XChangeProperty(display, window, a_zone, XA_STRING, 8, PropModeReplace, (unsigned char *)env, strlen(env));
if ((env = getenv("E_CONTAINER")))
XChangeProperty(display, window, a_container, XA_STRING, 8, PropModeReplace, env, strlen(env));
XChangeProperty(display, window, a_container, XA_STRING, 8, PropModeReplace, (unsigned char *)env, strlen(env));
if ((env = getenv("E_MANAGER")))
XChangeProperty(display, window, a_manager, XA_STRING, 8, PropModeReplace, env, strlen(env));
XChangeProperty(display, window, a_manager, XA_STRING, 8, PropModeReplace, (unsigned char *)env, strlen(env));
}
/* XCreateWindow intercept hack */