summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Nusinow <dnusinow@debian.org>2008-02-28 19:45:21 -0500
committerAdam Jackson <ajax@redhat.com>2008-03-24 16:06:33 -0400
commitf028e245a7932362656701c08fcfbfa8e8949077 (patch)
tree56808c00fc8dd520995f43c8cfe50dd19efaa9b0
parent862ff9ac92037e13629329eb6ba50ff6bd2c5f71 (diff)
Bug #10016: Implement WM_CLASS hints in Xephyr.
-rw-r--r--hw/kdrive/ephyr/ephyr.h1
-rw-r--r--hw/kdrive/ephyr/ephyrinit.c19
-rw-r--r--hw/kdrive/ephyr/hostx.c28
-rw-r--r--hw/kdrive/ephyr/hostx.h3
4 files changed, 51 insertions, 0 deletions
diff --git a/hw/kdrive/ephyr/ephyr.h b/hw/kdrive/ephyr/ephyr.h
index 8ed7e23dd..5d58a216c 100644
--- a/hw/kdrive/ephyr/ephyr.h
+++ b/hw/kdrive/ephyr/ephyr.h
@@ -28,6 +28,7 @@
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
+#include <libgen.h>
#include "os.h" /* for OsSignal() */
#include "kdrive.h"
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 6196996a9..47ddb3d82 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -109,6 +109,7 @@ ddxUseMsg (void)
ErrorF("-nodri do not use DRI\n");
#endif
ErrorF("-noxv do not use XV\n");
+ ErrorF("-name [name] define the name in the WM_CLASS property\n");
ErrorF("\n");
exit(1);
@@ -148,6 +149,11 @@ ddxProcessArgument (int argc, char **argv, int i)
{
EPHYR_DBG("mark argv[%d]='%s'", i, argv[i] );
+ if (i == 1)
+ {
+ hostx_use_resname(basename(argv[0]), 0);
+ }
+
if (!strcmp (argv[i], "-parent"))
{
if(i+1 < argc)
@@ -223,6 +229,19 @@ ddxProcessArgument (int argc, char **argv, int i)
EPHYR_LOG ("no XVideo enabled\n") ;
return 1 ;
}
+ else if (!strcmp (argv[i], "-name"))
+ {
+ if (i+1 < argc && argv[i+1][0] != '-')
+ {
+ hostx_use_resname(argv[i+1], 1);
+ return 2;
+ }
+ else
+ {
+ UseMsg();
+ return 0;
+ }
+ }
else if (argv[i][0] == ':')
{
hostx_set_display_name(argv[i]);
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
index fd84ec0ef..1a71d0641 100644
--- a/hw/kdrive/ephyr/hostx.c
+++ b/hw/kdrive/ephyr/hostx.c
@@ -107,6 +107,9 @@ extern EphyrKeySyms ephyrKeySyms;
extern int monitorResolution;
+char *ephyrResName = NULL;
+int ephyrResNameFromCmd = 0;
+
static void
hostx_set_fullscreen_hint(void);
@@ -296,6 +299,13 @@ hostx_handle_signal (int signum)
HostXWantDamageDebug);
}
+void
+hostx_use_resname (char *name, int fromcmd)
+{
+ ephyrResName = name;
+ ephyrResNameFromCmd = fromcmd;
+}
+
int
hostx_init (void)
{
@@ -304,6 +314,8 @@ hostx_init (void)
Pixmap cursor_pxm;
XColor col;
int index;
+ char *tmpstr;
+ XClassHint *class_hint;
attr.event_mask =
ButtonPressMask
@@ -327,6 +339,8 @@ hostx_init (void)
HostX.depth = DefaultDepth(HostX.dpy, HostX.screen);
HostX.visual = DefaultVisual(HostX.dpy, HostX.screen);
+ class_hint = XAllocClassHint();
+
for (index = 0 ; index < HostX.n_screens ; index++)
{
struct EphyrHostScreen *host_screen = &HostX.screens[index];
@@ -389,9 +403,23 @@ hostx_init (void)
hostx_set_fullscreen_hint();
}
+
+ if (class_hint)
+ {
+ tmpstr = getenv("RESOURCE_NAME");
+ if (tmpstr && (!ephyrResNameFromCmd))
+ ephyrResName = tmpstr;
+ class_hint->res_name = ephyrResName;
+ class_hint->res_class = "Xephyr";
+ XSetClassHint(hostx_get_display(), host_screen->win, class_hint);
+
+ }
+
}
}
+ if (class_hint)
+ XFree(class_hint);
XParseColor (HostX.dpy, DefaultColormap (HostX.dpy,HostX.screen),
"red", &col);
diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h
index 48d314748..47ba61b5b 100644
--- a/hw/kdrive/ephyr/hostx.h
+++ b/hw/kdrive/ephyr/hostx.h
@@ -145,6 +145,9 @@ hostx_want_preexisting_window(EphyrScreenInfo screen);
void
hostx_use_preexisting_window(unsigned long win_id);
+void
+hostx_use_resname (char *name, int fromcmd);
+
void
hostx_handle_signal(int signum);