Fixed: #1366 No Ryzom client icon under Ubuntu with Unity + Compiz
This commit is contained in:
parent
b02a4d6251
commit
312fc3eb74
1 changed files with 66 additions and 6 deletions
|
@ -188,6 +188,11 @@ bool GlWndProc(CDriverGL *driver, const void* e)
|
||||||
static Atom XA_WM_STATE = 0;
|
static Atom XA_WM_STATE = 0;
|
||||||
static Atom XA_WM_STATE_FULLSCREEN = 0;
|
static Atom XA_WM_STATE_FULLSCREEN = 0;
|
||||||
static Atom XA_WM_ICON = 0;
|
static Atom XA_WM_ICON = 0;
|
||||||
|
static Atom XA_WM_WINDOW_TYPE = 0;
|
||||||
|
static Atom XA_WM_WINDOW_TYPE_NORMAL = 0;
|
||||||
|
static Atom XA_UTF8_STRING = 0;
|
||||||
|
static Atom XA_WM_NAME = 0;
|
||||||
|
static Atom XA_WM_ICON_NAME = 0;
|
||||||
|
|
||||||
sint nelXErrorsHandler(Display *dpy, XErrorEvent *e)
|
sint nelXErrorsHandler(Display *dpy, XErrorEvent *e)
|
||||||
{
|
{
|
||||||
|
@ -233,7 +238,7 @@ bool GlWndProc(CDriverGL *driver, XEvent &e)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Expose:
|
case Expose:
|
||||||
nlwarning("Expose event");
|
// nlwarning("Expose event");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ConfigureNotify:
|
case ConfigureNotify:
|
||||||
|
@ -246,7 +251,7 @@ bool GlWndProc(CDriverGL *driver, XEvent &e)
|
||||||
driver->_DecorationWidth = e.xconfigure.x - driver->_WindowX;
|
driver->_DecorationWidth = e.xconfigure.x - driver->_WindowX;
|
||||||
driver->_DecorationHeight = e.xconfigure.y - driver->_WindowY;
|
driver->_DecorationHeight = e.xconfigure.y - driver->_WindowY;
|
||||||
|
|
||||||
nlwarning("Decoration size x = %d, y = %d", driver->_DecorationWidth, driver->_DecorationHeight);
|
// nlwarning("Decoration size x = %d, y = %d", driver->_DecorationWidth, driver->_DecorationHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
driver->_CurrentMode.Width = e.xconfigure.width;
|
driver->_CurrentMode.Width = e.xconfigure.width;
|
||||||
|
@ -256,7 +261,7 @@ bool GlWndProc(CDriverGL *driver, XEvent &e)
|
||||||
|
|
||||||
XConfigureEvent event = e.xconfigure;
|
XConfigureEvent event = e.xconfigure;
|
||||||
|
|
||||||
nlwarning("Configure x = %d, y = %d, width = %d, height = %d, send event = %d", event.x, event.y, event.width, event.height, event.send_event);
|
// nlwarning("Configure x = %d, y = %d, width = %d, height = %d, send event = %d", event.x, event.y, event.width, event.height, event.send_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -401,6 +406,11 @@ bool CDriverGL::init (uint windowIcon, emptyProc exitFunc)
|
||||||
XA_WM_STATE = XInternAtom(_dpy, "_NET_WM_STATE", False);
|
XA_WM_STATE = XInternAtom(_dpy, "_NET_WM_STATE", False);
|
||||||
XA_WM_STATE_FULLSCREEN = XInternAtom(_dpy, "_NET_WM_STATE_FULLSCREEN", False);
|
XA_WM_STATE_FULLSCREEN = XInternAtom(_dpy, "_NET_WM_STATE_FULLSCREEN", False);
|
||||||
XA_WM_ICON = XInternAtom(_dpy, "_NET_WM_ICON", False);
|
XA_WM_ICON = XInternAtom(_dpy, "_NET_WM_ICON", False);
|
||||||
|
XA_WM_WINDOW_TYPE = XInternalAtom(_dpy, "_NET_WM_WINDOW_TYPE", False);
|
||||||
|
XA_WM_WINDOW_TYPE_NORMAL = XInternalAtom(_dpy, "_NET_WM_WINDOW_TYPE_NORMAL", False);
|
||||||
|
XA_UTF8_STRING = XInternAtom(_dpy, "UTF8_STRING", False);
|
||||||
|
XA_WM_NAME = XInternAtom(_dpy, "_NET_WM_NAME", False);
|
||||||
|
XA_WM_ICON_NAME = XInternAtom(_dpy, "_NET_WM_ICON_NAME", False);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1528,6 +1538,42 @@ bool CDriverGL::createWindow(const GfxMode &mode)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// normal window type
|
||||||
|
XChangeProperty(_dpy, window, XA_WM_WINDOW_TYPE, XA_ATOM, 32, PropModeReplace, (const unsigned char*)&XA_WM_WINDOW_TYPE_NORMAL, 1);
|
||||||
|
|
||||||
|
// set WM hints
|
||||||
|
XWMHints *wm_hints = XAllocWMHints();
|
||||||
|
|
||||||
|
if (wm_hints)
|
||||||
|
{
|
||||||
|
wm_hints->flags = StateHint | InputHint;
|
||||||
|
wm_hints->initial_state = NormalState;
|
||||||
|
wm_hints->input = True;
|
||||||
|
|
||||||
|
XSetWMHints(_dpy, window, wm_hints);
|
||||||
|
XFree(wm_hints);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nlwarning("3D: Couldn't allocate XWMHints");
|
||||||
|
}
|
||||||
|
|
||||||
|
// set class hints
|
||||||
|
XClassHint *class_hints = XAllocClassHint();
|
||||||
|
|
||||||
|
if (class_hints)
|
||||||
|
{
|
||||||
|
class_hints->res_name = (char*)"NeL";
|
||||||
|
class_hints->res_class = (char*)"nel";
|
||||||
|
|
||||||
|
XSetClassHint(_dpy, window, class_hints);
|
||||||
|
XFree(class_hints);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nlwarning("3D: Couldn't allocate XClassHint");
|
||||||
|
}
|
||||||
|
|
||||||
#endif // NL_OS_UNIX
|
#endif // NL_OS_UNIX
|
||||||
|
|
||||||
_win = window;
|
_win = window;
|
||||||
|
@ -2199,15 +2245,29 @@ void CDriverGL::setWindowTitle(const ucstring &title)
|
||||||
[NSString stringWithUTF8String:title.toUtf8().c_str()]];
|
[NSString stringWithUTF8String:title.toUtf8().c_str()]];
|
||||||
|
|
||||||
#elif defined (NL_OS_UNIX)
|
#elif defined (NL_OS_UNIX)
|
||||||
|
char *utf8_title = (char*)title.toUtf8().c_str();
|
||||||
|
size_t utf8_title_length = title.toUtf8().length();
|
||||||
|
|
||||||
#ifdef X_HAVE_UTF8_STRING
|
#ifdef X_HAVE_UTF8_STRING
|
||||||
Xutf8SetWMProperties (_dpy, _win, (char*)title.toUtf8().c_str(), (char*)title.toUtf8().c_str(), NULL, 0, NULL, NULL, NULL);
|
// UTF8 properties
|
||||||
|
Xutf8SetWMProperties (_dpy, _win, utf8_title, utf8_title, NULL, 0, NULL, NULL, NULL);
|
||||||
#else
|
#else
|
||||||
|
// standard properties
|
||||||
XTextProperty text_property;
|
XTextProperty text_property;
|
||||||
XStringListToTextProperty((char**)&title.toUtf8().c_str(), 1, &text_property);
|
if (XStringListToTextProperty(&utf8_title, 1, &text_property) != 0)
|
||||||
XSetWMProperties (_dpy, _win, &text_property, &text_property, 0, 0, NULL, 0, 0);
|
{
|
||||||
|
XSetWMProperties (_dpy, _win, &text_property, &text_property, NULL, 0, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nlwarning("3D: Can't convert title to TextProperty");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// new UTF8 properties
|
||||||
|
XChangeProperty(_dpy, _win, XA_WM_NAME, XA_UTF8_STRING, 8, PropModeReplace, (const unsigned char*)utf8_title, utf8_title_length);
|
||||||
|
XChangeProperty(_dpy, _win, XA_WM_ICON_NAME, XA_UTF8_STRING, 8, PropModeReplace, (const unsigned char*)utf8_title, utf8_title_length);
|
||||||
|
|
||||||
#endif // NL_OS_WINDOWS
|
#endif // NL_OS_WINDOWS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue