server: Infrastructure for having a thread own the desktop window.
diff --git a/server/class.c b/server/class.c
index d483aef..0019e25 100644
--- a/server/class.c
+++ b/server/class.c
@@ -54,8 +54,6 @@
char extra_bytes[1]; /* extra bytes storage */
};
-static struct window_class *desktop_class;
-
static struct window_class *create_class( struct process *process, int extra_bytes, int local )
{
struct window_class *class;
@@ -75,24 +73,6 @@
return class;
}
-static struct window_class *get_desktop_class(void)
-{
- if (!desktop_class)
- {
- if (!(desktop_class = mem_alloc( sizeof(*desktop_class) - 1 ))) return NULL;
- desktop_class->process = NULL;
- desktop_class->count = 0;
- desktop_class->local = 0;
- desktop_class->nb_extra_bytes = 0;
- desktop_class->atom = DESKTOP_ATOM;
- desktop_class->instance = NULL;
- desktop_class->style = CS_DBLCLKS;
- desktop_class->win_extra = 0;
- desktop_class->client_ptr = NULL;
- }
- return desktop_class;
-}
-
static void destroy_class( struct window_class *class )
{
list_remove( &class->entry );
@@ -121,7 +101,6 @@
if (class->atom != atom) continue;
if (!instance || !class->local || class->instance == instance) return class;
}
- if (atom == DESKTOP_ATOM) return get_desktop_class();
return NULL;
}
@@ -144,6 +123,11 @@
class->count--;
}
+int is_desktop_class( struct window_class *class )
+{
+ return (class->atom == DESKTOP_ATOM && !class->local);
+}
+
atom_t get_class_atom( struct window_class *class )
{
return class->atom;
@@ -160,9 +144,6 @@
struct window_class *class;
struct winstation *winstation;
- if (!req->local && req->atom == DESKTOP_ATOM)
- return; /* silently ignore attempts to create the desktop class */
-
class = find_class( current->process, req->atom, req->instance );
if (class && !class->local == !req->local)
{
@@ -210,7 +191,7 @@
else
{
reply->client_ptr = class->client_ptr;
- if (class != desktop_class) destroy_class( class );
+ destroy_class( class );
}
}