support qtopia hint flags and also multiple netwm types

SVN revision: 33952
This commit is contained in:
Carsten Haitzler 2008-03-07 11:51:31 +00:00
parent 5551c78397
commit 1cf57c6566
4 changed files with 77 additions and 1 deletions

View File

@ -419,6 +419,14 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal)
bd->client.e.fetch.state = 1;
}
}
/* loop to check for qtopia atoms */
for (i = 0; i < at_num; i++)
{
if (atoms[i] == _QTOPIA_SOFT_MENU)
bd->client.qtopia.fetch.soft_menu = 1;
else if (atoms[i] == _QTOPIA_SOFT_MENUS)
bd->client.qtopia.fetch.soft_menus = 1;
}
free(atoms);
}
}
@ -3973,6 +3981,16 @@ _e_border_cb_window_property(void *data, int ev_type, void *ev)
bd->client.netwm.fetch.icon = 1;
bd->changed = 1;
}
else if (e->atom == _QTOPIA_SOFT_MENU)
{
bd->client.qtopia.fetch.soft_menu = 1;
bd->changed = 1;
}
else if (e->atom == _QTOPIA_SOFT_MENUS)
{
bd->client.qtopia.fetch.soft_menus = 1;
bd->changed = 1;
}
/*
else if (e->atom == ECORE_X_ATOM_NET_WM_USER_TIME)
{
@ -5454,6 +5472,18 @@ _e_border_eval(E_Border *bd)
}
bd->client.netwm.fetch.strut = 0;
}
if (bd->client.qtopia.fetch.soft_menu)
{
e_hints_window_qtopia_soft_menu_get(bd);
bd->client.qtopia.fetch.soft_menu = 0;
rem_change = 1;
}
if (bd->client.qtopia.fetch.soft_menus)
{
e_hints_window_qtopia_soft_menus_get(bd);
bd->client.qtopia.fetch.soft_menus = 0;
rem_change = 1;
}
if (bd->changes.shape)
{
Ecore_X_Rectangle *rects;
@ -6842,6 +6872,7 @@ _e_border_eval(E_Border *bd)
e_object_ref(E_OBJECT(bd));
ecore_event_add(E_EVENT_BORDER_PROPERTY, event, _e_border_event_border_property_free, NULL);
}
_e_border_hook_call(E_BORDER_HOOK_EVAL_END, bd);
}
static void

View File

@ -86,6 +86,7 @@ typedef enum _E_Border_Hook_Point
E_BORDER_HOOK_EVAL_POST_BORDER_ASSIGN,
E_BORDER_HOOK_EVAL_PRE_NEW_BORDER,
E_BORDER_HOOK_EVAL_POST_NEW_BORDER,
E_BORDER_HOOK_EVAL_END,
} E_Border_Hook_Point;
typedef struct _E_Border E_Border;
@ -336,6 +337,16 @@ struct _E_Border
unsigned char state : 1;
} fetch;
} e;
struct {
struct {
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} fetch;
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} qtopia;
Ecore_X_Window_Attributes initial_attributes;
} client;

View File

@ -3,12 +3,17 @@
*/
#include "e.h"
Ecore_X_Atom _QTOPIA_SOFT_MENU = 0;
Ecore_X_Atom _QTOPIA_SOFT_MENUS = 0;
EAPI void
e_hints_init(void)
{
Ecore_X_Window *roots = NULL;
int num;
_QTOPIA_SOFT_MENU = ecore_x_atom_get("_QTOPIA_SOFT_MENU");
_QTOPIA_SOFT_MENUS = ecore_x_atom_get("_QTOPIA_SOFT_MENUS");
roots = ecore_x_window_root_list(&num);
if (roots)
{
@ -1334,6 +1339,28 @@ e_hints_window_e_state_set(E_Border *bd)
/* TODO */
}
EAPI void
e_hints_window_qtopia_soft_menu_get(E_Border *bd)
{
int val;
if (ecore_x_window_prop_card32_get(bd->client.win, _QTOPIA_SOFT_MENU, &val, 1))
bd->client.qtopia.soft_menu = val;
else
bd->client.qtopia.soft_menu = 0;
}
EAPI void
e_hints_window_qtopia_soft_menus_get(E_Border *bd)
{
int val;
if (ecore_x_window_prop_card32_get(bd->client.win, _QTOPIA_SOFT_MENUS, &val, 1))
bd->client.qtopia.soft_menus = val;
else
bd->client.qtopia.soft_menus = 0;
}
EAPI void
e_hints_openoffice_gnome_fake(Ecore_X_Window root)
{
@ -1354,3 +1381,4 @@ e_hints_openoffice_kde_fake(Ecore_X_Window root)
win2 = ecore_x_window_new(root, -20, -20, 1, 1);
ecore_x_netwm_wm_identify(root, win2, "KWin");
}

View File

@ -45,8 +45,14 @@ EAPI void e_hints_window_desktop_set(E_Border *bd);
EAPI void e_hints_window_e_state_set(E_Border *bd);
EAPI void e_hints_window_e_state_get(E_Border *bd);
EAPI void e_hints_window_qtopia_soft_menu_get(E_Border *bd);
EAPI void e_hints_window_qtopia_soft_menus_get(E_Border *bd);
EAPI void e_hints_openoffice_gnome_fake(Ecore_X_Window root);
EAPI void e_hints_openoffice_kde_fake(Ecore_X_Window root);
extern EAPI Ecore_X_Atom _QTOPIA_SOFT_MENU;
extern EAPI Ecore_X_Atom _QTOPIA_SOFT_MENUS;
#endif
#endif