Enlightenment CVS committal
Author : xcomputerman
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x
Modified Files:
Ecore_X.h ecore_x_icccm.c ecore_x_window_prop.c
Log Message:
More ICCCM code, replicated from window_prop*. Corresponding functions are
deprecated and will be removed in the future.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -3 -r1.76 -r1.77
--- Ecore_X.h 25 Nov 2004 14:09:23 -0000 1.76
+++ Ecore_X.h 26 Nov 2004 06:42:24 -0000 1.77
@@ -995,6 +995,24 @@
ecore_x_icccm_title_set(Ecore_X_Window win, const char *t);
EAPI char *
ecore_x_icccm_title_get(Ecore_X_Window win);
+ EAPI void
+ ecore_x_icccm_protocol_set(Ecore_X_Window win,
+ Ecore_X_WM_Protocol protocol,
+ int on);
+ EAPI int
+ ecore_x_icccm_protocol_isset(Ecore_X_Window win,
+ Ecore_X_WM_Protocol protocol);
+ EAPI void
+ ecore_x_icccm_name_class_set(Ecore_X_Window win,
+ const char *n,
+ const char *c);
+ EAPI char *
+ ecore_x_icccm_client_machine_get(Ecore_X_Window win);
+ EAPI void
+ ecore_x_icccm_command_set(Ecore_X_Window win, int argc, char **argv);
+ EAPI void
+ ecore_x_icccm_command_get(Ecore_X_Window win, int *argc, char ***argv);
+
typedef enum _Ecore_X_MWM_Hint_Func
{
===================================================================
RCS file:
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_icccm.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- ecore_x_icccm.c 24 Nov 2004 07:27:58 -0000 1.7
+++ ecore_x_icccm.c 26 Nov 2004 06:42:24 -0000 1.8
@@ -409,6 +409,191 @@
return NULL;
}
+/**
+ * Set or unset a wm protocol property.
+ * @param win The Window
+ * @param protocol The protocol to enable/disable
+ * @param on On/Off
+ */
+void
+ecore_x_icccm_protocol_set(Ecore_X_Window win,
+ Ecore_X_WM_Protocol protocol,
+ int on)
+{
+ Atom *protos = NULL;
+ Atom proto;
+ int protos_count = 0;
+ int already_set = 0;
+ int i;
+
+ /* Check for invalid values */
+ if (protocol < 0 || protocol >= ECORE_X_WM_PROTOCOL_NUM)
+ return;
+
+ proto = _ecore_x_atoms_wm_protocols[protocol];
+
+ if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
+ {
+ protos = NULL;
+ protos_count = 0;
+ }
+
+ for (i = 0; i < protos_count; i++)
+ {
+ if (protos[i] == proto)
+ {
+ already_set = 1;
+ break;
+ }
+ }
+
+ if (on)
+ {
+ Atom *new_protos = NULL;
+
+ if (already_set) goto leave;
+ new_protos = malloc((protos_count + 1) * sizeof(Atom));
+ if (!new_protos) goto leave;
+ for (i = 0; i < protos_count; i++)
+ new_protos[i] = protos[i];
+ new_protos[protos_count] = proto;
+ XSetWMProtocols(_ecore_x_disp, win, new_protos, protos_count + 1);
+ free(new_protos);
+ }
+ else
+ {
+ if (!already_set) goto leave;
+ for (i = 0; i < protos_count; i++)
+ {
+ if (protos[i] == proto)
+ {
+ int j;
+
+ for (j = i + 1; j < protos_count; j++)
+ protos[j-1] = protos[j];
+ if (protos_count > 1)
+ XSetWMProtocols(_ecore_x_disp, win, protos,
+ protos_count - 1);
+ else
+ XDeleteProperty(_ecore_x_disp, win,
+ _ecore_x_atom_wm_protocols);
+ goto leave;
+ }
+ }
+ }
+
+ leave:
+ if (protos)
+ XFree(protos);
+
+}
+
+
+/**
+ * Determines whether a protocol is set for a window.
+ * @param win The Window
+ * @param protocol The protocol to query
+ * @return 1 if the protocol is set, else 0.
+ */
+int
+ecore_x_icccm_protocol_isset(Ecore_X_Window win,
+ Ecore_X_WM_Protocol protocol)
+{
+ Atom proto, *protos = NULL;
+ int i, ret = 0, protos_count = 0;
+
+ /* check for invalid values */
+ if (protocol < 0 || protocol >= ECORE_X_WM_PROTOCOL_NUM)
+ return 0;
+
+ proto = _ecore_x_atoms_wm_protocols[protocol];
+
+ if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
+ return 0;
+
+ for (i = 0; i < protos_count; i++)
+ if (protos[i] == proto)
+ {
+ ret = 1;
+ break;
+ }
+
+ XFree(protos);
+ return ret;
+
+}
+
+/**
+ * Set a window name & class.
+ * @param win The window
+ * @param n The name string
+ * @param c The class string
+ *
+ * Set a window name * class
+ */
+void
+ecore_x_icccm_name_class_set(Ecore_X_Window win,
+ const char *n,
+ const char *c)
+{
+ XClassHint *xch;
+
+ xch = XAllocClassHint();
+ if (!xch)
+ return;
+ xch->res_name = (char *)n;
+ xch->res_class = (char *)c;
+ XSetClassHint(_ecore_x_disp, win, xch);
+ XFree(xch);
+}
+
+/**
+ * Get a window client machine string.
+ * @param win The window
+ * @return The windows client machine string
+ *
+ * Return the client machine of a window. String must be free'd when done with.
+ */
+char *
+ecore_x_icccm_client_machine_get(Ecore_X_Window win)
+{
+ char *name;
+
+ name = ecore_x_window_prop_string_get(win, _ecore_x_atom_wm_client_machine);
+ return name;
+}
+
+/**
+ * Sets the WM_COMMAND property for @a win.
+ *
+ * @param win The window.
+ * @param argc Number of arguments.
+ * @param argv Arguments.
+ */
+void
+ecore_x_icccm_command_set(Ecore_X_Window win, int argc, char **argv)
+{
+ XSetCommand(_ecore_x_disp, win, argv, argc);
+}
+
+/**
+ * Get the WM_COMMAND property for @a win.
+ *
+ * Return the command of a window. String must be free'd when done with.
+ *
+ * @param win The window.
+ * @param argc Number of arguments.
+ * @param argv Arguments.
+ */
+void
+ecore_x_window_icccm_command_get(Ecore_X_Window win, int *argc, char ***argv)
+{
+ XGetCommand(_ecore_x_disp, win, argv, argc);
+}
+
+
+
+
/* FIXME: move these things in here as they are icccm related */
/* get/set wm protocols */
/* get/set name/class */
===================================================================
RCS file:
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_window_prop.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -3 -r1.53 -r1.54
--- ecore_x_window_prop.c 25 Nov 2004 14:09:24 -0000 1.53
+++ ecore_x_window_prop.c 26 Nov 2004 06:42:24 -0000 1.54
@@ -260,6 +260,8 @@
* @param win The window.
* @param argc Number of arguments.
* @param argv Arguments.
+ *
+ * DEPRECATED. Please use ecore_x_icccm_command_set() instead.
*/
void
ecore_x_window_prop_command_set(Ecore_X_Window win, int argc, char **argv)
@@ -275,6 +277,8 @@
* @param win The window.
* @param argc Number of arguments.
* @param argv Arguments.
+ *
+ * DEPRECATED. Please use ecore_x_icccm_command_get() instead.
*/
void
ecore_x_window_prop_command_get(Ecore_X_Window win, int *argc, char ***argv)
@@ -382,6 +386,7 @@
* @return The windows client machine string
*
* Return the client machine of a window. String must be free'd when done with.
+ * DEPRECATED. Please use ecore_x_icccm_client_machine_get() instead.
*/
char *
ecore_x_window_prop_client_machine_get(Ecore_X_Window win)
@@ -423,6 +428,7 @@
* @param c The class string
*
* Set a window name * class
+ * DEPRECATED. Please use ecore_x_icccm_name_class_set() instead.
*/
void
ecore_x_window_prop_name_class_set(Ecore_X_Window win, const char *n, const
char *c)
@@ -473,7 +479,8 @@
* @param win The Window
* @param protocol The protocol to enable/disable
* @param on On/Off
- *
+ *
+ * DEPRECATED. Please use ecore_x_icccm_protocol_set() instead.
*/
void
ecore_x_window_prop_protocol_set(Ecore_X_Window win,
@@ -547,6 +554,8 @@
* @param win The Window
* @param protocol The protocol to query
* @return 1 if the protocol is set, else 0.
+ *
+ * DEPRECATED. Please use ecore_x_icccm_protocol_isset() instead.
*/
int
ecore_x_window_prop_protocol_isset(Ecore_X_Window win,
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs