Alexandre Julliard : winex11: Set hints for the existing window text when creating the whole window.
Alexandre Julliard
julliard at winehq.org
Wed Jan 23 14:36:45 CST 2008
Module: wine
Branch: master
Commit: 3ba20257ceff42c25401e6d8f301479df64f8c93
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3ba20257ceff42c25401e6d8f301479df64f8c93
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Jan 23 16:32:55 2008 +0100
winex11: Set hints for the existing window text when creating the whole window.
---
dlls/winex11.drv/window.c | 91 ++++++++++++++++++++++++---------------------
1 files changed, 49 insertions(+), 42 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index fd05cc9..1d6a060 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -260,6 +260,49 @@ static void sync_window_region( Display *display, struct x11drv_win_data *data,
/***********************************************************************
+ * sync_window_text
+ */
+static void sync_window_text( Display *display, Window win, const WCHAR *text )
+{
+ UINT count;
+ char *buffer, *utf8_buffer;
+ XTextProperty prop;
+
+ /* allocate new buffer for window text */
+ count = WideCharToMultiByte(CP_UNIXCP, 0, text, -1, NULL, 0, NULL, NULL);
+ if (!(buffer = HeapAlloc( GetProcessHeap(), 0, count ))) return;
+ WideCharToMultiByte(CP_UNIXCP, 0, text, -1, buffer, count, NULL, NULL);
+
+ count = WideCharToMultiByte(CP_UTF8, 0, text, strlenW(text), NULL, 0, NULL, NULL);
+ if (!(utf8_buffer = HeapAlloc( GetProcessHeap(), 0, count )))
+ {
+ HeapFree( GetProcessHeap(), 0, buffer );
+ return;
+ }
+ WideCharToMultiByte(CP_UTF8, 0, text, strlenW(text), utf8_buffer, count, NULL, NULL);
+
+ wine_tsx11_lock();
+ if (XmbTextListToTextProperty( display, &buffer, 1, XStdICCTextStyle, &prop ) == Success)
+ {
+ XSetWMName( display, win, &prop );
+ XSetWMIconName( display, win, &prop );
+ XFree( prop.value );
+ }
+ /*
+ Implements a NET_WM UTF-8 title. It should be without a trailing \0,
+ according to the standard
+ ( http://www.pps.jussieu.fr/~jch/software/UTF8_STRING/UTF8_STRING.text ).
+ */
+ XChangeProperty( display, win, x11drv_atom(_NET_WM_NAME), x11drv_atom(UTF8_STRING),
+ 8, PropModeReplace, (unsigned char *) utf8_buffer, count);
+ wine_tsx11_unlock();
+
+ HeapFree( GetProcessHeap(), 0, utf8_buffer );
+ HeapFree( GetProcessHeap(), 0, buffer );
+}
+
+
+/***********************************************************************
* X11DRV_set_win_format
*/
BOOL X11DRV_set_win_format( HWND hwnd, XID fbconfig_id )
@@ -1051,6 +1094,7 @@ static Window create_whole_window( Display *display, struct x11drv_win_data *dat
int cx, cy, mask;
XSetWindowAttributes attr;
XIM xim;
+ WCHAR text[1024];
HRGN hrgn;
if (!(cx = data->window_rect.right - data->window_rect.left)) cx = 1;
@@ -1091,6 +1135,10 @@ static Window create_whole_window( Display *display, struct x11drv_win_data *dat
SetPropA( data->hwnd, whole_window_prop, (HANDLE)data->whole_window );
+ /* set the window text */
+ if (!InternalGetWindowText( data->hwnd, text, sizeof(text)/sizeof(WCHAR) )) text[0] = 0;
+ sync_window_text( display, data->whole_window, text );
+
/* set the window region */
if ((hrgn = CreateRectRgn( 0, 0, 0, 0 )))
{
@@ -1139,51 +1187,10 @@ static void destroy_whole_window( Display *display, struct x11drv_win_data *data
void X11DRV_SetWindowText( HWND hwnd, LPCWSTR text )
{
Display *display = thread_display();
- UINT count;
- char *buffer;
- char *utf8_buffer;
Window win;
- XTextProperty prop;
if ((win = X11DRV_get_whole_window( hwnd )) && win != DefaultRootWindow(display))
- {
- /* allocate new buffer for window text */
- count = WideCharToMultiByte(CP_UNIXCP, 0, text, -1, NULL, 0, NULL, NULL);
- if (!(buffer = HeapAlloc( GetProcessHeap(), 0, count )))
- {
- ERR("Not enough memory for window text\n");
- return;
- }
- WideCharToMultiByte(CP_UNIXCP, 0, text, -1, buffer, count, NULL, NULL);
-
- count = WideCharToMultiByte(CP_UTF8, 0, text, strlenW(text), NULL, 0, NULL, NULL);
- if (!(utf8_buffer = HeapAlloc( GetProcessHeap(), 0, count )))
- {
- ERR("Not enough memory for window text in UTF-8\n");
- HeapFree( GetProcessHeap(), 0, buffer );
- return;
- }
- WideCharToMultiByte(CP_UTF8, 0, text, strlenW(text), utf8_buffer, count, NULL, NULL);
-
- wine_tsx11_lock();
- if (XmbTextListToTextProperty( display, &buffer, 1, XStdICCTextStyle, &prop ) == Success)
- {
- XSetWMName( display, win, &prop );
- XSetWMIconName( display, win, &prop );
- XFree( prop.value );
- }
- /*
- Implements a NET_WM UTF-8 title. It should be without a trailing \0,
- according to the standard
- ( http://www.pps.jussieu.fr/~jch/software/UTF8_STRING/UTF8_STRING.text ).
- */
- XChangeProperty( display, win, x11drv_atom(_NET_WM_NAME), x11drv_atom(UTF8_STRING),
- 8, PropModeReplace, (unsigned char *) utf8_buffer, count);
- wine_tsx11_unlock();
-
- HeapFree( GetProcessHeap(), 0, utf8_buffer );
- HeapFree( GetProcessHeap(), 0, buffer );
- }
+ sync_window_text( display, win, text );
}
More information about the wine-cvs
mailing list