add support for new netwm csd X atoms

nothing uses these yet so there's no way to test them.

fix T1963
This commit is contained in:
Mike Blumenkrantz 2015-01-03 00:42:42 -05:00
parent 9ff9de799a
commit 701e2d914a
4 changed files with 71 additions and 4 deletions

View File

@ -90,3 +90,7 @@ _NET_FRAME_EXTENTS [X]
_NET_WM_PING [X]
_NET_WM_SYNC_REQUEST [X]
_NET_WM_SYNC_REQUEST_COUNTER [X]
/* Random */
_NET_WM_SHOW_WINDOW_MENU [X]
_NET_WM_PERFORM_BUTTON_ACTION [X]

View File

@ -1945,6 +1945,57 @@ _e_comp_x_message(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_Cl
free(p);
}
}
else if (ev->message_type == ATM_NETWM_SHOW_WINDOW_MENU)
{
/*
message_type = _NET_WM_SHOW_WINDOW_MENU
window = window for which the menu should be shown
format = 32
data.l[0] = xinput2_device_id
data.l[1] = root_x
data.l[2] = root_y
other data.l[] elements = 0
*/
int x, y;
x = ev->data.l[1];
y = ev->data.l[2];
e_int_client_menu_show(ec,
e_comp_canvas_x_root_adjust(ec->comp, x),
e_comp_canvas_y_root_adjust(ec->comp, y),
0, 0);
}
else if (ev->message_type == ATM_NETWM_PERFORM_BUTTON_ACTION)
{
char emission[128];
/*
message_type = _NET_WM_PERFORM_BUTTON_ACTION
window = window for which the action should be performed
format = 32
data.l[0] = xinput2_device_id
data.l[1] = root_x
data.l[2] = root_y
data.l[3] = button
data.l[4] = timestamp
*/
if (e_dnd_active() || ec->iconic) return ECORE_CALLBACK_RENEW;
switch (ev->data.l[3])
{
case 1:
case 2:
case 3:
snprintf(emission, sizeof(emission), "mouse,down,%d", (int)ev->data.l[3]);
e_bindings_signal_handle(E_BINDING_CONTEXT_WINDOW, E_OBJECT(ec), emission, "e.event.titlebar");
break;
case 4:
e_bindings_signal_handle(E_BINDING_CONTEXT_WINDOW, E_OBJECT(ec), "mouse,wheel,?,-1", "e.event.titlebar");
break;
case 5:
e_bindings_signal_handle(E_BINDING_CONTEXT_WINDOW, E_OBJECT(ec), "mouse,wheel,?,1", "e.event.titlebar");
break;
}
}
return ECORE_CALLBACK_PASS_ON;
}

View File

@ -13,6 +13,9 @@ EAPI Ecore_X_Atom ATM_GNOME_SM_PROXY = 0;
EAPI Ecore_X_Atom ATM_ENLIGHTENMENT_COMMS = 0;
EAPI Ecore_X_Atom ATM_ENLIGHTENMENT_VERSION = 0;
EAPI Ecore_X_Atom ATM_ENLIGHTENMENT_SCALE = 0;
EAPI Ecore_X_Atom ATM_NETWM_SHOW_WINDOW_MENU = 0;
EAPI Ecore_X_Atom ATM_NETWM_PERFORM_BUTTON_ACTION = 0;
#endif
EINTERN void
@ -26,23 +29,27 @@ e_hints_init(Ecore_Window root, Ecore_Window propwin)
"GNOME_SM_PROXY",
"ENLIGHTENMENT_COMMS",
"ENLIGHTENMENT_VERSION",
"ENLIGHTENMENT_SCALE"
"ENLIGHTENMENT_SCALE",
"_NET_WM_SHOW_WINDOW_MENU",
"_NET_WM_PERFORM_BUTTON_ACTION",
};
Ecore_X_Atom atoms[6];
Ecore_X_Atom supported[43];
Ecore_X_Atom atoms[EINA_C_ARRAY_LENGTH(atom_names)];
Ecore_X_Atom supported[45];
int supported_num;
Ecore_X_Window win, twin;
int nwins;
char *name;
double ts;
ecore_x_atoms_get(atom_names, 6, atoms);
ecore_x_atoms_get(atom_names, EINA_C_ARRAY_LENGTH(atom_names), atoms);
ATM__QTOPIA_SOFT_MENU = atoms[0];
ATM__QTOPIA_SOFT_MENUS = atoms[1];
ATM_GNOME_SM_PROXY = atoms[2];
ATM_ENLIGHTENMENT_COMMS = atoms[3];
ATM_ENLIGHTENMENT_VERSION = atoms[4];
ATM_ENLIGHTENMENT_SCALE = atoms[5];
ATM_NETWM_SHOW_WINDOW_MENU = atoms[6];
ATM_NETWM_PERFORM_BUTTON_ACTION = atoms[7];
supported_num = 0;
/* Set what hints we support */
@ -121,6 +128,9 @@ e_hints_init(Ecore_Window root, Ecore_Window propwin)
supported[supported_num++] = ECORE_X_ATOM_E_VIDEO_PARENT;
supported[supported_num++] = ECORE_X_ATOM_E_VIDEO_POSITION;
supported[supported_num++] = ATM_NETWM_SHOW_WINDOW_MENU;
supported[supported_num++] = ATM_NETWM_PERFORM_BUTTON_ACTION;

View File

@ -55,6 +55,8 @@ extern EAPI Ecore_X_Atom ATM_GNOME_SM_PROXY;
extern EAPI Ecore_X_Atom ATM_ENLIGHTENMENT_COMMS;
extern EAPI Ecore_X_Atom ATM_ENLIGHTENMENT_VERSION;
extern EAPI Ecore_X_Atom ATM_ENLIGHTENMENT_SCALE;
extern EAPI Ecore_X_Atom ATM_NETWM_SHOW_WINDOW_MENU;
extern EAPI Ecore_X_Atom ATM_NETWM_PERFORM_BUTTON_ACTION;
#endif
#endif
#endif