mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 17:10:40 -05:00
use meta_XFree not XFree
2002-01-03 Havoc Pennington <hp@pobox.com> * src/window.c: use meta_XFree not XFree * src/display.h (meta_XFree): add null-safe XFree * src/util.c (meta_warning): have message prefix indicate that it's a warning (meta_fatal): indicate it's an error * src/window.c (update_sm_hints): clean up using meta_prop_get_latin1_string (update_role): ditto (read_client_leader): clean up using meta_prop_get_window (update_net_wm_type): clean up using meta_prop_get_cardinal (update_initial_workspace): ditto (update_net_wm_type): clean up using meta_prop_get_atom_list (read_rgb_icon): get result from XGetWindowProperty return value not from error trap (update_kwm_icon): ditto (meta_window_new): fix to read WM_STATE correctly
This commit is contained in:
parent
b9701454b8
commit
501a60ab20
22
ChangeLog
22
ChangeLog
@ -1,3 +1,25 @@
|
|||||||
|
2002-01-03 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* src/window.c: use meta_XFree not XFree
|
||||||
|
|
||||||
|
* src/display.h (meta_XFree): add null-safe XFree
|
||||||
|
|
||||||
|
* src/util.c (meta_warning): have message prefix indicate that
|
||||||
|
it's a warning
|
||||||
|
(meta_fatal): indicate it's an error
|
||||||
|
|
||||||
|
* src/window.c (update_sm_hints): clean up using
|
||||||
|
meta_prop_get_latin1_string
|
||||||
|
(update_role): ditto
|
||||||
|
(read_client_leader): clean up using meta_prop_get_window
|
||||||
|
(update_net_wm_type): clean up using meta_prop_get_cardinal
|
||||||
|
(update_initial_workspace): ditto
|
||||||
|
(update_net_wm_type): clean up using meta_prop_get_atom_list
|
||||||
|
(read_rgb_icon): get result from XGetWindowProperty return value
|
||||||
|
not from error trap
|
||||||
|
(update_kwm_icon): ditto
|
||||||
|
(meta_window_new): fix to read WM_STATE correctly
|
||||||
|
|
||||||
2002-01-03 Havoc Pennington <hp@pobox.com>
|
2002-01-03 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
* src/window.c (update_net_wm_state): clean up using
|
* src/window.c (update_net_wm_state): clean up using
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
#include "eventqueue.h"
|
#include "eventqueue.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#define meta_XFree(p) do { if ((p)) XFree ((p)); } while (0)
|
||||||
|
|
||||||
/* this doesn't really belong here, oh well. */
|
/* this doesn't really belong here, oh well. */
|
||||||
typedef struct _MetaRectangle MetaRectangle;
|
typedef struct _MetaRectangle MetaRectangle;
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ meta_warning (const char *format, ...)
|
|||||||
out = logfile ? logfile : stderr;
|
out = logfile ? logfile : stderr;
|
||||||
|
|
||||||
if (no_prefix == 0)
|
if (no_prefix == 0)
|
||||||
fputs ("Window manager: ", out);
|
fputs ("Window manager warning: ", out);
|
||||||
fputs (str, out);
|
fputs (str, out);
|
||||||
|
|
||||||
g_free (str);
|
g_free (str);
|
||||||
@ -274,7 +274,7 @@ meta_fatal (const char *format, ...)
|
|||||||
out = logfile ? logfile : stderr;
|
out = logfile ? logfile : stderr;
|
||||||
|
|
||||||
if (no_prefix == 0)
|
if (no_prefix == 0)
|
||||||
fputs ("Window manager: ", out);
|
fputs ("Window manager error: ", out);
|
||||||
fputs (str, out);
|
fputs (str, out);
|
||||||
|
|
||||||
fflush (out);
|
fflush (out);
|
||||||
|
350
src/window.c
350
src/window.c
@ -65,8 +65,8 @@ static void update_mwm_hints (MetaWindow *window);
|
|||||||
static int update_wm_class (MetaWindow *window);
|
static int update_wm_class (MetaWindow *window);
|
||||||
static int update_transient_for (MetaWindow *window);
|
static int update_transient_for (MetaWindow *window);
|
||||||
static void update_sm_hints (MetaWindow *window);
|
static void update_sm_hints (MetaWindow *window);
|
||||||
static int update_role (MetaWindow *window);
|
static void update_role (MetaWindow *window);
|
||||||
static int update_net_wm_type (MetaWindow *window);
|
static void update_net_wm_type (MetaWindow *window);
|
||||||
static int update_initial_workspace (MetaWindow *window);
|
static int update_initial_workspace (MetaWindow *window);
|
||||||
static int update_icon_name (MetaWindow *window);
|
static int update_icon_name (MetaWindow *window);
|
||||||
static int update_icon (MetaWindow *window,
|
static int update_icon (MetaWindow *window,
|
||||||
@ -105,19 +105,10 @@ static void meta_window_move_resize_internal (MetaWindow *window,
|
|||||||
|
|
||||||
void meta_window_move_resize_now (MetaWindow *window);
|
void meta_window_move_resize_now (MetaWindow *window);
|
||||||
|
|
||||||
static gboolean get_cardinal (MetaDisplay *display,
|
|
||||||
Window xwindow,
|
|
||||||
Atom atom,
|
|
||||||
gulong *val);
|
|
||||||
|
|
||||||
static char* get_text_property (MetaDisplay *display,
|
static char* get_text_property (MetaDisplay *display,
|
||||||
Window xwindow,
|
Window xwindow,
|
||||||
Atom atom);
|
Atom atom);
|
||||||
|
|
||||||
static char* get_utf8_property (MetaDisplay *display,
|
|
||||||
Window xwindow,
|
|
||||||
Atom atom);
|
|
||||||
|
|
||||||
void meta_window_unqueue_calc_showing (MetaWindow *window);
|
void meta_window_unqueue_calc_showing (MetaWindow *window);
|
||||||
void meta_window_flush_calc_showing (MetaWindow *window);
|
void meta_window_flush_calc_showing (MetaWindow *window);
|
||||||
|
|
||||||
@ -176,10 +167,11 @@ meta_window_new (MetaDisplay *display, Window xwindow,
|
|||||||
/* Only manage if WM_STATE is IconicState or NormalState */
|
/* Only manage if WM_STATE is IconicState or NormalState */
|
||||||
gulong state;
|
gulong state;
|
||||||
|
|
||||||
/* FIXME WM_STATE isn't a cardinal, it's type WM_STATE */
|
/* WM_STATE isn't a cardinal, it's type WM_STATE, but is an int */
|
||||||
if (!(get_cardinal (display, xwindow,
|
if (!(meta_prop_get_cardinal_with_atom_type (display, xwindow,
|
||||||
display->atom_wm_state,
|
display->atom_wm_state,
|
||||||
&state) &&
|
display->atom_wm_state,
|
||||||
|
&state) &&
|
||||||
(state == IconicState || state == NormalState)))
|
(state == IconicState || state == NormalState)))
|
||||||
{
|
{
|
||||||
meta_verbose ("Deciding not to manage unmapped or unviewable window 0x%lx\n", xwindow);
|
meta_verbose ("Deciding not to manage unmapped or unviewable window 0x%lx\n", xwindow);
|
||||||
@ -2441,10 +2433,8 @@ meta_window_client_message (MetaWindow *window,
|
|||||||
str1 ? str1 : "(unknown)",
|
str1 ? str1 : "(unknown)",
|
||||||
str2 ? str2 : "(unknown)");
|
str2 ? str2 : "(unknown)");
|
||||||
|
|
||||||
if (str1)
|
meta_XFree (str1);
|
||||||
XFree (str1);
|
meta_XFree (str2);
|
||||||
if (str2)
|
|
||||||
XFree (str2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first == display->atom_net_wm_state_shaded ||
|
if (first == display->atom_net_wm_state_shaded ||
|
||||||
@ -3111,6 +3101,8 @@ update_size_hints (MetaWindow *window)
|
|||||||
static int
|
static int
|
||||||
update_title (MetaWindow *window)
|
update_title (MetaWindow *window)
|
||||||
{
|
{
|
||||||
|
char *str;
|
||||||
|
|
||||||
meta_error_trap_push (window->display);
|
meta_error_trap_push (window->display);
|
||||||
|
|
||||||
if (window->title)
|
if (window->title)
|
||||||
@ -3119,9 +3111,13 @@ update_title (MetaWindow *window)
|
|||||||
window->title = NULL;
|
window->title = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
window->title = get_utf8_property (window->display,
|
str = NULL;
|
||||||
window->xwindow,
|
meta_prop_get_utf8_string (window->display,
|
||||||
window->display->atom_net_wm_name);
|
window->xwindow,
|
||||||
|
window->display->atom_net_wm_name,
|
||||||
|
&str);
|
||||||
|
window->title = g_strdup (str);
|
||||||
|
meta_XFree (str);
|
||||||
|
|
||||||
if (window->title)
|
if (window->title)
|
||||||
{
|
{
|
||||||
@ -3183,8 +3179,7 @@ update_protocols (MetaWindow *window)
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (protocols)
|
meta_XFree (protocols);
|
||||||
XFree (protocols);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_verbose ("Window %s has take_focus = %d delete_window = %d\n",
|
meta_verbose ("Window %s has take_focus = %d delete_window = %d\n",
|
||||||
@ -3243,7 +3238,7 @@ update_wm_hints (MetaWindow *window)
|
|||||||
window->xgroup_leader, window->icon_pixmap,
|
window->xgroup_leader, window->icon_pixmap,
|
||||||
window->icon_mask);
|
window->icon_mask);
|
||||||
|
|
||||||
XFree (hints);
|
meta_XFree (hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
return meta_error_trap_pop (window->display);
|
return meta_error_trap_pop (window->display);
|
||||||
@ -3284,7 +3279,7 @@ update_net_wm_state (MetaWindow *window)
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
XFree (atoms);
|
meta_XFree (atoms);
|
||||||
}
|
}
|
||||||
|
|
||||||
recalc_window_type (window);
|
recalc_window_type (window);
|
||||||
@ -3392,7 +3387,7 @@ update_mwm_hints (MetaWindow *window)
|
|||||||
else
|
else
|
||||||
meta_verbose ("Functions flag unset\n");
|
meta_verbose ("Functions flag unset\n");
|
||||||
|
|
||||||
XFree (hints);
|
meta_XFree (hints);
|
||||||
|
|
||||||
recalc_window_features (window);
|
recalc_window_features (window);
|
||||||
}
|
}
|
||||||
@ -3413,7 +3408,7 @@ meta_window_get_icon_geometry (MetaWindow *window,
|
|||||||
{
|
{
|
||||||
meta_verbose ("_NET_WM_ICON_GEOMETRY on %s has %d values instead of 4\n",
|
meta_verbose ("_NET_WM_ICON_GEOMETRY on %s has %d values instead of 4\n",
|
||||||
window->desc, nitems);
|
window->desc, nitems);
|
||||||
XFree (geometry);
|
meta_XFree (geometry);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3425,7 +3420,7 @@ meta_window_get_icon_geometry (MetaWindow *window,
|
|||||||
rect->height = geometry[3];
|
rect->height = geometry[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
XFree (geometry);
|
meta_XFree (geometry);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -3475,71 +3470,15 @@ update_wm_class (MetaWindow *window)
|
|||||||
return meta_error_trap_pop (window->display);
|
return meta_error_trap_pop (window->display);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
read_string_prop (MetaDisplay *display,
|
|
||||||
Window xwindow,
|
|
||||||
Atom atom,
|
|
||||||
char **strp)
|
|
||||||
{
|
|
||||||
Atom type;
|
|
||||||
int format;
|
|
||||||
gulong nitems;
|
|
||||||
gulong bytes_after;
|
|
||||||
guchar *str;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
meta_error_trap_push (display);
|
|
||||||
str = NULL;
|
|
||||||
XGetWindowProperty (display->xdisplay,
|
|
||||||
xwindow, atom,
|
|
||||||
0, G_MAXLONG,
|
|
||||||
False, XA_STRING, &type, &format, &nitems,
|
|
||||||
&bytes_after, (guchar **)&str);
|
|
||||||
|
|
||||||
result = meta_error_trap_pop (display);
|
|
||||||
if (result != Success)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
if (type != XA_STRING)
|
|
||||||
return -1; /* whatever */
|
|
||||||
|
|
||||||
*strp = g_strdup (str);
|
|
||||||
|
|
||||||
XFree (str);
|
|
||||||
|
|
||||||
return Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Window
|
static Window
|
||||||
read_client_leader (MetaDisplay *display,
|
read_client_leader (MetaDisplay *display,
|
||||||
Window xwindow)
|
Window xwindow)
|
||||||
{
|
{
|
||||||
Atom type;
|
Window retval = None;
|
||||||
int format;
|
|
||||||
gulong nitems;
|
|
||||||
gulong bytes_after;
|
|
||||||
Window *leader;
|
|
||||||
int result;
|
|
||||||
Window retval;
|
|
||||||
|
|
||||||
meta_error_trap_push (display);
|
meta_prop_get_window (display, xwindow,
|
||||||
leader = NULL;
|
display->atom_wm_client_leader,
|
||||||
XGetWindowProperty (display->xdisplay, xwindow,
|
&retval);
|
||||||
display->atom_wm_client_leader,
|
|
||||||
0, G_MAXLONG,
|
|
||||||
False, XA_WINDOW, &type, &format, &nitems,
|
|
||||||
&bytes_after, (guchar **)&leader);
|
|
||||||
|
|
||||||
result = meta_error_trap_pop (display);
|
|
||||||
if (result != Success)
|
|
||||||
return None;
|
|
||||||
|
|
||||||
if (type != XA_WINDOW)
|
|
||||||
return None;
|
|
||||||
|
|
||||||
retval = *leader;
|
|
||||||
|
|
||||||
XFree (leader);
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -3577,36 +3516,45 @@ update_sm_hints (MetaWindow *window)
|
|||||||
|
|
||||||
if (leader)
|
if (leader)
|
||||||
{
|
{
|
||||||
|
char *str;
|
||||||
|
|
||||||
window->xclient_leader = leader;
|
window->xclient_leader = leader;
|
||||||
read_string_prop (window->display, leader,
|
|
||||||
window->display->atom_sm_client_id,
|
if (meta_prop_get_latin1_string (window->display, leader,
|
||||||
&window->sm_client_id);
|
window->display->atom_sm_client_id,
|
||||||
|
&str))
|
||||||
|
{
|
||||||
|
window->sm_client_id = g_strdup (str);
|
||||||
|
meta_XFree (str);
|
||||||
|
}
|
||||||
|
|
||||||
meta_verbose ("Window %s client leader: 0x%lx SM_CLIENT_ID: '%s'\n",
|
meta_verbose ("Window %s client leader: 0x%lx SM_CLIENT_ID: '%s'\n",
|
||||||
window->desc, window->xclient_leader,
|
window->desc, window->xclient_leader,
|
||||||
window->sm_client_id ? window->sm_client_id : "(null)");
|
window->sm_client_id ? window->sm_client_id : "(null)");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
meta_verbose ("Didn't find a client leader for %s\n", window->desc);
|
meta_verbose ("Didn't find a client leader for %s\n", window->desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static void
|
||||||
update_role (MetaWindow *window)
|
update_role (MetaWindow *window)
|
||||||
{
|
{
|
||||||
int result;
|
char *str;
|
||||||
|
|
||||||
if (window->role)
|
if (window->role)
|
||||||
g_free (window->role);
|
g_free (window->role);
|
||||||
window->role = NULL;
|
window->role = NULL;
|
||||||
|
|
||||||
result = read_string_prop (window->display, window->xwindow,
|
if (meta_prop_get_latin1_string (window->display, window->xwindow,
|
||||||
window->display->atom_wm_window_role,
|
window->display->atom_wm_window_role,
|
||||||
&window->role);
|
&str))
|
||||||
|
{
|
||||||
|
window->role = g_strdup (str);
|
||||||
|
meta_XFree (str);
|
||||||
|
}
|
||||||
|
|
||||||
meta_verbose ("Updated role of %s to '%s'\n",
|
meta_verbose ("Updated role of %s to '%s'\n",
|
||||||
window->desc, window->role ? window->role : "(null)");
|
window->desc, window->role ? window->role : "(null)");
|
||||||
|
|
||||||
return Success;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -3636,42 +3584,6 @@ update_transient_for (MetaWindow *window)
|
|||||||
return meta_error_trap_pop (window->display);
|
return meta_error_trap_pop (window->display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
get_cardinal (MetaDisplay *display,
|
|
||||||
Window xwindow,
|
|
||||||
Atom atom,
|
|
||||||
gulong *val)
|
|
||||||
{
|
|
||||||
Atom type;
|
|
||||||
int format;
|
|
||||||
gulong nitems;
|
|
||||||
gulong bytes_after;
|
|
||||||
gulong *num;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
meta_error_trap_push (display);
|
|
||||||
type = None;
|
|
||||||
XGetWindowProperty (display->xdisplay,
|
|
||||||
xwindow,
|
|
||||||
atom,
|
|
||||||
0, G_MAXLONG,
|
|
||||||
False, XA_CARDINAL, &type, &format, &nitems,
|
|
||||||
&bytes_after, (guchar **)&num);
|
|
||||||
err = meta_error_trap_pop (display);
|
|
||||||
if (err != Success)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (type != XA_CARDINAL)
|
|
||||||
return FALSE; /* FIXME free num ? */
|
|
||||||
|
|
||||||
*val = *num;
|
|
||||||
|
|
||||||
XFree (num);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char*
|
static char*
|
||||||
get_text_property (MetaDisplay *display,
|
get_text_property (MetaDisplay *display,
|
||||||
Window xwindow,
|
Window xwindow,
|
||||||
@ -3704,61 +3616,6 @@ get_text_property (MetaDisplay *display,
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char*
|
|
||||||
get_utf8_property (MetaDisplay *display,
|
|
||||||
Window xwindow,
|
|
||||||
Atom atom)
|
|
||||||
{
|
|
||||||
Atom type;
|
|
||||||
int format;
|
|
||||||
gulong nitems;
|
|
||||||
gulong bytes_after;
|
|
||||||
guchar *val;
|
|
||||||
int err;
|
|
||||||
char *retval;
|
|
||||||
|
|
||||||
meta_error_trap_push (display);
|
|
||||||
type = None;
|
|
||||||
val = NULL;
|
|
||||||
XGetWindowProperty (display->xdisplay,
|
|
||||||
xwindow,
|
|
||||||
atom,
|
|
||||||
0, G_MAXLONG,
|
|
||||||
False, display->atom_utf8_string,
|
|
||||||
&type, &format, &nitems,
|
|
||||||
&bytes_after, (guchar **)&val);
|
|
||||||
err = meta_error_trap_pop (display);
|
|
||||||
|
|
||||||
if (err != Success)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (type != display->atom_utf8_string ||
|
|
||||||
format != 8 ||
|
|
||||||
nitems == 0)
|
|
||||||
{
|
|
||||||
if (val)
|
|
||||||
XFree (val);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!g_utf8_validate (val, nitems, NULL))
|
|
||||||
{
|
|
||||||
char *name;
|
|
||||||
name = XGetAtomName (display->xdisplay, atom);
|
|
||||||
meta_warning ("Property %s contained invalid UTF-8\n",
|
|
||||||
name);
|
|
||||||
XFree (name);
|
|
||||||
XFree (val);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
retval = g_strndup (val, nitems);
|
|
||||||
|
|
||||||
XFree (val);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* some legacy cruft */
|
/* some legacy cruft */
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
@ -3770,37 +3627,28 @@ typedef enum
|
|||||||
WIN_LAYER_ABOVE_DOCK = 10
|
WIN_LAYER_ABOVE_DOCK = 10
|
||||||
} GnomeWinLayer;
|
} GnomeWinLayer;
|
||||||
|
|
||||||
static int
|
static void
|
||||||
update_net_wm_type (MetaWindow *window)
|
update_net_wm_type (MetaWindow *window)
|
||||||
{
|
{
|
||||||
Atom type;
|
int n_atoms;
|
||||||
int format;
|
|
||||||
gulong n_atoms;
|
|
||||||
gulong bytes_after;
|
|
||||||
Atom *atoms;
|
Atom *atoms;
|
||||||
int result;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
window->type_atom = None;
|
window->type_atom = None;
|
||||||
|
n_atoms = 0;
|
||||||
|
atoms = NULL;
|
||||||
|
|
||||||
meta_error_trap_push (window->display);
|
if (!meta_prop_get_atom_list (window->display, window->xwindow,
|
||||||
XGetWindowProperty (window->display->xdisplay, window->xwindow,
|
window->display->atom_net_wm_window_type,
|
||||||
window->display->atom_net_wm_window_type,
|
&atoms, &n_atoms))
|
||||||
0, G_MAXLONG,
|
|
||||||
False, XA_ATOM, &type, &format, &n_atoms,
|
|
||||||
&bytes_after, (guchar **)&atoms);
|
|
||||||
|
|
||||||
result = meta_error_trap_pop (window->display);
|
|
||||||
if (result != Success ||
|
|
||||||
type != XA_ATOM)
|
|
||||||
{
|
{
|
||||||
/* Fall back to WIN_LAYER */
|
/* Fall back to WIN_LAYER */
|
||||||
gulong layer = WIN_LAYER_NORMAL;
|
gulong layer = WIN_LAYER_NORMAL;
|
||||||
|
|
||||||
if (get_cardinal (window->display,
|
if (meta_prop_get_cardinal (window->display,
|
||||||
window->xwindow,
|
window->xwindow,
|
||||||
window->display->atom_win_layer,
|
window->display->atom_win_layer,
|
||||||
&layer))
|
&layer))
|
||||||
{
|
{
|
||||||
meta_verbose ("%s falling back to _WIN_LAYER hint, layer %ld\n",
|
meta_verbose ("%s falling back to _WIN_LAYER hint, layer %ld\n",
|
||||||
window->desc, layer);
|
window->desc, layer);
|
||||||
@ -3824,9 +3672,8 @@ update_net_wm_type (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
recalc_window_type (window);
|
recalc_window_type (window);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < n_atoms)
|
while (i < n_atoms)
|
||||||
{
|
{
|
||||||
@ -3847,7 +3694,7 @@ update_net_wm_type (MetaWindow *window)
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
XFree (atoms);
|
meta_XFree (atoms);
|
||||||
|
|
||||||
if (meta_is_verbose ())
|
if (meta_is_verbose ())
|
||||||
{
|
{
|
||||||
@ -3862,11 +3709,10 @@ update_net_wm_type (MetaWindow *window)
|
|||||||
str ? str : "(none)");
|
str ? str : "(none)");
|
||||||
|
|
||||||
if (str)
|
if (str)
|
||||||
XFree (str);
|
meta_XFree (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
recalc_window_type (window);
|
recalc_window_type (window);
|
||||||
return Success;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -3880,18 +3726,18 @@ update_initial_workspace (MetaWindow *window)
|
|||||||
* is just to be nice when restarting from old Sawfish basically,
|
* is just to be nice when restarting from old Sawfish basically,
|
||||||
* should nuke it eventually
|
* should nuke it eventually
|
||||||
*/
|
*/
|
||||||
if (get_cardinal (window->display,
|
if (meta_prop_get_cardinal (window->display,
|
||||||
window->xwindow,
|
window->xwindow,
|
||||||
window->display->atom_net_wm_desktop,
|
window->display->atom_net_wm_desktop,
|
||||||
&val))
|
&val))
|
||||||
{
|
{
|
||||||
window->initial_workspace_set = TRUE;
|
window->initial_workspace_set = TRUE;
|
||||||
window->initial_workspace = val;
|
window->initial_workspace = val;
|
||||||
}
|
}
|
||||||
else if (get_cardinal (window->display,
|
else if (meta_prop_get_cardinal (window->display,
|
||||||
window->xwindow,
|
window->xwindow,
|
||||||
window->display->atom_win_workspace,
|
window->display->atom_win_workspace,
|
||||||
&val))
|
&val))
|
||||||
{
|
{
|
||||||
window->initial_workspace_set = TRUE;
|
window->initial_workspace_set = TRUE;
|
||||||
window->initial_workspace = val;
|
window->initial_workspace = val;
|
||||||
@ -3903,6 +3749,8 @@ update_initial_workspace (MetaWindow *window)
|
|||||||
static int
|
static int
|
||||||
update_icon_name (MetaWindow *window)
|
update_icon_name (MetaWindow *window)
|
||||||
{
|
{
|
||||||
|
char *str;
|
||||||
|
|
||||||
meta_error_trap_push (window->display);
|
meta_error_trap_push (window->display);
|
||||||
|
|
||||||
if (window->icon_name)
|
if (window->icon_name)
|
||||||
@ -3911,9 +3759,15 @@ update_icon_name (MetaWindow *window)
|
|||||||
window->icon_name = NULL;
|
window->icon_name = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
window->icon_name = get_utf8_property (window->display, window->xwindow,
|
str = NULL;
|
||||||
window->display->atom_net_wm_icon_name);
|
meta_prop_get_utf8_string (window->display, window->xwindow,
|
||||||
|
window->display->atom_net_wm_icon_name,
|
||||||
|
&str);
|
||||||
|
|
||||||
|
window->icon_name = g_strdup (str);
|
||||||
|
if (str)
|
||||||
|
meta_XFree (str);
|
||||||
|
|
||||||
if (window->icon_name)
|
if (window->icon_name)
|
||||||
{
|
{
|
||||||
meta_verbose ("Using _NET_WM_ICON_NAME for new icon name of %s: '%s'\n",
|
meta_verbose ("Using _NET_WM_ICON_NAME for new icon name of %s: '%s'\n",
|
||||||
@ -4085,23 +3939,19 @@ read_rgb_icon (MetaWindow *window,
|
|||||||
gulong *best;
|
gulong *best;
|
||||||
int w, h;
|
int w, h;
|
||||||
gulong *best_mini;
|
gulong *best_mini;
|
||||||
int mini_w, mini_h;
|
int mini_w, mini_h;
|
||||||
|
|
||||||
if (sizeof (gulong) != 4)
|
|
||||||
meta_warning ("%s: Whoops, I think this function may be broken on 64-bit\n",
|
|
||||||
G_GNUC_FUNCTION);
|
|
||||||
|
|
||||||
meta_error_trap_push (window->display);
|
meta_error_trap_push (window->display);
|
||||||
type = None;
|
type = None;
|
||||||
data = NULL;
|
data = NULL;
|
||||||
XGetWindowProperty (window->display->xdisplay,
|
result = XGetWindowProperty (window->display->xdisplay,
|
||||||
window->xwindow,
|
window->xwindow,
|
||||||
window->display->atom_net_wm_icon,
|
window->display->atom_net_wm_icon,
|
||||||
0, G_MAXLONG,
|
0, G_MAXLONG,
|
||||||
False, XA_CARDINAL, &type, &format, &nitems,
|
False, XA_CARDINAL, &type, &format, &nitems,
|
||||||
&bytes_after, ((guchar **)&data));
|
&bytes_after, ((guchar **)&data));
|
||||||
|
|
||||||
result = meta_error_trap_pop (window->display);
|
meta_error_trap_pop (window->display);
|
||||||
|
|
||||||
if (result != Success || type != XA_CARDINAL)
|
if (result != Success || type != XA_CARDINAL)
|
||||||
{
|
{
|
||||||
@ -4113,14 +3963,14 @@ read_rgb_icon (MetaWindow *window,
|
|||||||
if (!find_best_size (data, nitems, META_ICON_WIDTH, META_ICON_HEIGHT,
|
if (!find_best_size (data, nitems, META_ICON_WIDTH, META_ICON_HEIGHT,
|
||||||
&w, &h, &best))
|
&w, &h, &best))
|
||||||
{
|
{
|
||||||
XFree (data);
|
meta_XFree (data);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!find_best_size (data, nitems, META_MINI_ICON_WIDTH, META_MINI_ICON_HEIGHT,
|
if (!find_best_size (data, nitems, META_MINI_ICON_WIDTH, META_MINI_ICON_HEIGHT,
|
||||||
&mini_w, &mini_h, &best_mini))
|
&mini_w, &mini_h, &best_mini))
|
||||||
{
|
{
|
||||||
XFree (data);
|
meta_XFree (data);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4133,7 +3983,7 @@ read_rgb_icon (MetaWindow *window,
|
|||||||
argbdata_to_pixdata (best, w * h, pixdata);
|
argbdata_to_pixdata (best, w * h, pixdata);
|
||||||
argbdata_to_pixdata (best_mini, mini_w * mini_h, mini_pixdata);
|
argbdata_to_pixdata (best_mini, mini_w * mini_h, mini_pixdata);
|
||||||
|
|
||||||
XFree (data);
|
meta_XFree (data);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -4460,26 +4310,26 @@ update_kwm_icon (MetaWindow *window)
|
|||||||
|
|
||||||
meta_error_trap_push (window->display);
|
meta_error_trap_push (window->display);
|
||||||
icons = NULL;
|
icons = NULL;
|
||||||
XGetWindowProperty (window->display->xdisplay, window->xwindow,
|
result = XGetWindowProperty (window->display->xdisplay, window->xwindow,
|
||||||
window->display->atom_kwm_win_icon,
|
window->display->atom_kwm_win_icon,
|
||||||
0, G_MAXLONG,
|
0, G_MAXLONG,
|
||||||
False, window->display->atom_kwm_win_icon,
|
False, window->display->atom_kwm_win_icon,
|
||||||
&type, &format, &nitems,
|
&type, &format, &nitems,
|
||||||
&bytes_after, (guchar **)&icons);
|
&bytes_after, (guchar **)&icons);
|
||||||
|
|
||||||
result = meta_error_trap_pop (window->display);
|
meta_error_trap_pop (window->display);
|
||||||
if (result != Success)
|
if (result != Success)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
if (type != window->display->atom_kwm_win_icon)
|
if (type != window->display->atom_kwm_win_icon)
|
||||||
return -1; /* FIXME mem leak? */
|
return -1; /* FIXME mem leak? */
|
||||||
|
|
||||||
window->kwm_pixmap = icons[0];
|
window->kwm_pixmap = icons[0];
|
||||||
window->kwm_mask = icons[1];
|
window->kwm_mask = icons[1];
|
||||||
|
|
||||||
meta_verbose ("Found KWM_WIN_ICON 0x%lx\n", window->kwm_pixmap);
|
meta_verbose ("Found KWM_WIN_ICON 0x%lx\n", window->kwm_pixmap);
|
||||||
|
|
||||||
XFree (icons);
|
meta_XFree (icons);
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
217
src/xprops.c
217
src/xprops.c
@ -30,7 +30,8 @@ check_type_and_format (MetaDisplay *display,
|
|||||||
Window xwindow,
|
Window xwindow,
|
||||||
Atom xatom,
|
Atom xatom,
|
||||||
int expected_format,
|
int expected_format,
|
||||||
Atom expected_type,
|
Atom expected_type,
|
||||||
|
int n_items, /* -1 to not check this */
|
||||||
int format,
|
int format,
|
||||||
Atom type)
|
Atom type)
|
||||||
{
|
{
|
||||||
@ -39,8 +40,9 @@ check_type_and_format (MetaDisplay *display,
|
|||||||
char *prop_name;
|
char *prop_name;
|
||||||
|
|
||||||
if (expected_format == format &&
|
if (expected_format == format &&
|
||||||
expected_type == type)
|
expected_type == type &&
|
||||||
return TRUE;
|
(n_items < 0 || n_items > 0))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
meta_error_trap_push (display);
|
meta_error_trap_push (display);
|
||||||
type_name = XGetAtomName (display->xdisplay, type);
|
type_name = XGetAtomName (display->xdisplay, type);
|
||||||
@ -48,13 +50,13 @@ check_type_and_format (MetaDisplay *display,
|
|||||||
prop_name = XGetAtomName (display->xdisplay, xatom);
|
prop_name = XGetAtomName (display->xdisplay, xatom);
|
||||||
meta_error_trap_pop (display);
|
meta_error_trap_pop (display);
|
||||||
|
|
||||||
meta_warning (_("Window 0x%lx has property %s that was expected to have type %s format %d and actually has type %s format %d\n"),
|
meta_warning (_("Window 0x%lx has property %s that was expected to have type %s format %d and actually has type %s format %d n_items %d\n"),
|
||||||
xwindow,
|
xwindow,
|
||||||
prop_name ? prop_name : "(bad atom)",
|
prop_name ? prop_name : "(bad atom)",
|
||||||
expected_name ? expected_name : "(bad atom)",
|
expected_name ? expected_name : "(bad atom)",
|
||||||
expected_format,
|
expected_format,
|
||||||
type_name ? type_name : "(bad atom)",
|
type_name ? type_name : "(bad atom)",
|
||||||
format);
|
format, n_items);
|
||||||
|
|
||||||
if (type_name)
|
if (type_name)
|
||||||
XFree (type_name);
|
XFree (type_name);
|
||||||
@ -86,7 +88,8 @@ meta_prop_get_atom_list (MetaDisplay *display,
|
|||||||
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||||
0, G_MAXLONG,
|
0, G_MAXLONG,
|
||||||
False, XA_ATOM, &type, &format, &n_atoms,
|
False, XA_ATOM, &type, &format, &n_atoms,
|
||||||
&bytes_after, (guchar **)&atoms) != Success)
|
&bytes_after, (guchar **)&atoms) != Success ||
|
||||||
|
type == None)
|
||||||
{
|
{
|
||||||
meta_error_trap_pop (display);
|
meta_error_trap_pop (display);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -96,7 +99,7 @@ meta_prop_get_atom_list (MetaDisplay *display,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!check_type_and_format (display, xwindow, xatom, 32, XA_ATOM,
|
if (!check_type_and_format (display, xwindow, xatom, 32, XA_ATOM,
|
||||||
format, type))
|
-1, format, type))
|
||||||
{
|
{
|
||||||
XFree (atoms);
|
XFree (atoms);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -128,7 +131,8 @@ meta_prop_get_cardinal_list (MetaDisplay *display,
|
|||||||
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||||
0, G_MAXLONG,
|
0, G_MAXLONG,
|
||||||
False, XA_CARDINAL, &type, &format, &n_cardinals,
|
False, XA_CARDINAL, &type, &format, &n_cardinals,
|
||||||
&bytes_after, (guchar **)&cardinals) != Success)
|
&bytes_after, (guchar **)&cardinals) != Success ||
|
||||||
|
type == None)
|
||||||
{
|
{
|
||||||
meta_error_trap_pop (display);
|
meta_error_trap_pop (display);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -138,7 +142,7 @@ meta_prop_get_cardinal_list (MetaDisplay *display,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!check_type_and_format (display, xwindow, xatom, 32, XA_CARDINAL,
|
if (!check_type_and_format (display, xwindow, xatom, 32, XA_CARDINAL,
|
||||||
format, type))
|
-1, format, type))
|
||||||
{
|
{
|
||||||
XFree (cardinals);
|
XFree (cardinals);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -170,7 +174,8 @@ meta_prop_get_motif_hints (MetaDisplay *display,
|
|||||||
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||||
0, EXPECTED_ITEMS,
|
0, EXPECTED_ITEMS,
|
||||||
False, AnyPropertyType, &type, &format, &n_items,
|
False, AnyPropertyType, &type, &format, &n_items,
|
||||||
&bytes_after, (guchar **)&hints) != Success)
|
&bytes_after, (guchar **)&hints) != Success ||
|
||||||
|
type == None)
|
||||||
{
|
{
|
||||||
meta_error_trap_pop (display);
|
meta_error_trap_pop (display);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -190,3 +195,195 @@ meta_prop_get_motif_hints (MetaDisplay *display,
|
|||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_prop_get_latin1_string (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
char **str_p)
|
||||||
|
{
|
||||||
|
Atom type;
|
||||||
|
int format;
|
||||||
|
gulong bytes_after;
|
||||||
|
guchar *str;
|
||||||
|
gulong n_items;
|
||||||
|
|
||||||
|
*str_p = NULL;
|
||||||
|
|
||||||
|
meta_error_trap_push (display);
|
||||||
|
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||||
|
0, G_MAXLONG,
|
||||||
|
False, XA_STRING, &type, &format, &n_items,
|
||||||
|
&bytes_after, (guchar **)&str) != Success ||
|
||||||
|
type == None)
|
||||||
|
{
|
||||||
|
meta_error_trap_pop (display);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meta_error_trap_pop (display) != Success)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!check_type_and_format (display, xwindow, xatom, 8, XA_STRING,
|
||||||
|
-1, format, type))
|
||||||
|
{
|
||||||
|
XFree (str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*str_p = str;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_prop_get_utf8_string (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
char **str_p)
|
||||||
|
{
|
||||||
|
Atom type;
|
||||||
|
int format;
|
||||||
|
gulong bytes_after;
|
||||||
|
guchar *str;
|
||||||
|
gulong n_items;
|
||||||
|
|
||||||
|
*str_p = NULL;
|
||||||
|
|
||||||
|
meta_error_trap_push (display);
|
||||||
|
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||||
|
0, G_MAXLONG,
|
||||||
|
False, display->atom_utf8_string,
|
||||||
|
&type, &format, &n_items,
|
||||||
|
&bytes_after, (guchar **)&str) != Success ||
|
||||||
|
type == None)
|
||||||
|
{
|
||||||
|
meta_error_trap_pop (display);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meta_error_trap_pop (display) != Success)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!check_type_and_format (display, xwindow, xatom, 8,
|
||||||
|
display->atom_utf8_string,
|
||||||
|
-1, format, type))
|
||||||
|
{
|
||||||
|
XFree (str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g_utf8_validate (str, n_items, NULL))
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = XGetAtomName (display->xdisplay, xatom);
|
||||||
|
meta_warning (_("Property %s on window 0x%lx contained invalid UTF-8\n"),
|
||||||
|
name, xwindow);
|
||||||
|
XFree (name);
|
||||||
|
XFree (str);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*str_p = str;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_prop_get_window (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
Window *window_p)
|
||||||
|
{
|
||||||
|
Atom type;
|
||||||
|
int format;
|
||||||
|
gulong bytes_after;
|
||||||
|
Window *window;
|
||||||
|
gulong n_items;
|
||||||
|
|
||||||
|
*window_p = None;
|
||||||
|
|
||||||
|
meta_error_trap_push (display);
|
||||||
|
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||||
|
0, G_MAXLONG,
|
||||||
|
False, XA_WINDOW, &type, &format, &n_items,
|
||||||
|
&bytes_after, (guchar **)&window) != Success ||
|
||||||
|
type == None)
|
||||||
|
{
|
||||||
|
meta_error_trap_pop (display);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meta_error_trap_pop (display) != Success)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!check_type_and_format (display, xwindow, xatom, 32, XA_WINDOW,
|
||||||
|
-1, format, type))
|
||||||
|
{
|
||||||
|
XFree (window);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*window_p = *window;
|
||||||
|
|
||||||
|
XFree (window);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_prop_get_cardinal (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
gulong *cardinal_p)
|
||||||
|
|
||||||
|
{
|
||||||
|
return meta_prop_get_cardinal_with_atom_type (display, xwindow, xatom,
|
||||||
|
XA_CARDINAL, cardinal_p);
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_prop_get_cardinal_with_atom_type (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
Atom prop_type,
|
||||||
|
gulong *cardinal_p)
|
||||||
|
{
|
||||||
|
Atom type;
|
||||||
|
int format;
|
||||||
|
gulong bytes_after;
|
||||||
|
gulong *cardinal;
|
||||||
|
gulong n_items;
|
||||||
|
|
||||||
|
*cardinal_p = 0;
|
||||||
|
|
||||||
|
meta_error_trap_push (display);
|
||||||
|
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||||
|
0, G_MAXLONG,
|
||||||
|
False, prop_type, &type, &format, &n_items,
|
||||||
|
&bytes_after, (guchar **)&cardinal) != Success ||
|
||||||
|
type == None)
|
||||||
|
{
|
||||||
|
meta_error_trap_pop (display);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meta_error_trap_pop (display) != Success)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!check_type_and_format (display, xwindow, xatom, 32, prop_type,
|
||||||
|
-1, format, type))
|
||||||
|
{
|
||||||
|
XFree (cardinal);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*cardinal_p = *cardinal;
|
||||||
|
|
||||||
|
XFree (cardinal);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
21
src/xprops.h
21
src/xprops.h
@ -81,6 +81,27 @@ gboolean meta_prop_get_cardinal_list (MetaDisplay *display,
|
|||||||
Atom xatom,
|
Atom xatom,
|
||||||
gulong **cardinals_p,
|
gulong **cardinals_p,
|
||||||
int *n_cardinals_p);
|
int *n_cardinals_p);
|
||||||
|
gboolean meta_prop_get_latin1_string (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
char **str_p);
|
||||||
|
gboolean meta_prop_get_utf8_string (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
char **str_p);
|
||||||
|
gboolean meta_prop_get_window (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
Window *window_p);
|
||||||
|
gboolean meta_prop_get_cardinal (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
gulong *cardinal_p);
|
||||||
|
gboolean meta_prop_get_cardinal_with_atom_type (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
Atom prop_type,
|
||||||
|
gulong *cardinal_p);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user