mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 10:41:12 +00:00
explorer: Retrieve the graphics driver module from gdi32.
This commit is contained in:
parent
0d7108c629
commit
3e24a17c03
3 changed files with 20 additions and 14 deletions
|
@ -21,13 +21,14 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "wine/port.h"
|
#include "wine/port.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "wine/unicode.h"
|
|
||||||
|
|
||||||
#define OEMRESOURCE
|
#define OEMRESOURCE
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <rpc.h>
|
#include <rpc.h>
|
||||||
#include <wine/debug.h>
|
|
||||||
|
#include "wine/gdi_driver.h"
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
#include "wine/debug.h"
|
||||||
#include "explorer_private.h"
|
#include "explorer_private.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(explorer);
|
WINE_DEFAULT_DEBUG_CHANNEL(explorer);
|
||||||
|
@ -35,6 +36,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(explorer);
|
||||||
#define DESKTOP_CLASS_ATOM ((LPCWSTR)MAKEINTATOM(32769))
|
#define DESKTOP_CLASS_ATOM ((LPCWSTR)MAKEINTATOM(32769))
|
||||||
#define DESKTOP_ALL_ACCESS 0x01ff
|
#define DESKTOP_ALL_ACCESS 0x01ff
|
||||||
|
|
||||||
|
static HMODULE graphics_driver;
|
||||||
static BOOL using_root;
|
static BOOL using_root;
|
||||||
|
|
||||||
/* screen saver handler */
|
/* screen saver handler */
|
||||||
|
@ -108,7 +110,6 @@ static LRESULT WINAPI desktop_wnd_proc( HWND hwnd, UINT message, WPARAM wp, LPAR
|
||||||
static unsigned long create_desktop( const WCHAR *name, unsigned int width, unsigned int height )
|
static unsigned long create_desktop( const WCHAR *name, unsigned int width, unsigned int height )
|
||||||
{
|
{
|
||||||
static const WCHAR rootW[] = {'r','o','o','t',0};
|
static const WCHAR rootW[] = {'r','o','o','t',0};
|
||||||
HMODULE x11drv = GetModuleHandleA( "winex11.drv" );
|
|
||||||
HDESK desktop;
|
HDESK desktop;
|
||||||
unsigned long xwin = 0;
|
unsigned long xwin = 0;
|
||||||
unsigned long (CDECL *create_desktop_func)(unsigned int, unsigned int);
|
unsigned long (CDECL *create_desktop_func)(unsigned int, unsigned int);
|
||||||
|
@ -119,10 +120,10 @@ static unsigned long create_desktop( const WCHAR *name, unsigned int width, unsi
|
||||||
WINE_ERR( "failed to create desktop %s error %d\n", wine_dbgstr_w(name), GetLastError() );
|
WINE_ERR( "failed to create desktop %s error %d\n", wine_dbgstr_w(name), GetLastError() );
|
||||||
ExitProcess( 1 );
|
ExitProcess( 1 );
|
||||||
}
|
}
|
||||||
/* magic: desktop "root" means use the X11 root window */
|
/* magic: desktop "root" means use the root window */
|
||||||
if (x11drv && strcmpiW( name, rootW ))
|
if (graphics_driver && strcmpiW( name, rootW ))
|
||||||
{
|
{
|
||||||
create_desktop_func = (void *)GetProcAddress( x11drv, "wine_create_desktop" );
|
create_desktop_func = (void *)GetProcAddress( graphics_driver, "wine_create_desktop" );
|
||||||
if (create_desktop_func) xwin = create_desktop_func( width, height );
|
if (create_desktop_func) xwin = create_desktop_func( width, height );
|
||||||
}
|
}
|
||||||
SetThreadDesktop( desktop );
|
SetThreadDesktop( desktop );
|
||||||
|
@ -260,8 +261,10 @@ static void set_desktop_window_title( HWND hwnd, const WCHAR *name )
|
||||||
/* main desktop management function */
|
/* main desktop management function */
|
||||||
void manage_desktop( WCHAR *arg )
|
void manage_desktop( WCHAR *arg )
|
||||||
{
|
{
|
||||||
|
static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0};
|
||||||
static const WCHAR messageW[] = {'M','e','s','s','a','g','e',0};
|
static const WCHAR messageW[] = {'M','e','s','s','a','g','e',0};
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
HDC hdc;
|
||||||
HWND hwnd, msg_hwnd;
|
HWND hwnd, msg_hwnd;
|
||||||
unsigned long xwin = 0;
|
unsigned long xwin = 0;
|
||||||
unsigned int width, height;
|
unsigned int width, height;
|
||||||
|
@ -293,6 +296,9 @@ void manage_desktop( WCHAR *arg )
|
||||||
if (!get_default_desktop_size( name, &width, &height )) width = height = 0;
|
if (!get_default_desktop_size( name, &width, &height )) width = height = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hdc = CreateDCW( displayW, NULL, NULL, NULL );
|
||||||
|
graphics_driver = __wine_get_driver_module( hdc );
|
||||||
|
|
||||||
if (name && width && height) xwin = create_desktop( name, width, height );
|
if (name && width && height) xwin = create_desktop( name, width, height );
|
||||||
|
|
||||||
if (!xwin) using_root = TRUE; /* using the root window */
|
if (!xwin) using_root = TRUE; /* using the root window */
|
||||||
|
@ -308,6 +314,8 @@ void manage_desktop( WCHAR *arg )
|
||||||
msg_hwnd = CreateWindowExW( 0, messageW, NULL, WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
|
msg_hwnd = CreateWindowExW( 0, messageW, NULL, WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
|
||||||
0, 0, 100, 100, 0, 0, 0, NULL );
|
0, 0, 100, 100, 0, 0, 0, NULL );
|
||||||
|
|
||||||
|
DeleteDC( hdc );
|
||||||
|
|
||||||
if (hwnd == GetDesktopWindow())
|
if (hwnd == GetDesktopWindow())
|
||||||
{
|
{
|
||||||
HMODULE shell32;
|
HMODULE shell32;
|
||||||
|
@ -320,7 +328,7 @@ void manage_desktop( WCHAR *arg )
|
||||||
ClipCursor( NULL );
|
ClipCursor( NULL );
|
||||||
initialize_display_settings( hwnd );
|
initialize_display_settings( hwnd );
|
||||||
initialize_appbar();
|
initialize_appbar();
|
||||||
initialize_systray( using_root );
|
initialize_systray( graphics_driver, using_root );
|
||||||
|
|
||||||
if ((shell32 = LoadLibraryA( "shell32.dll" )) &&
|
if ((shell32 = LoadLibraryA( "shell32.dll" )) &&
|
||||||
(pShellDDEInit = (void *)GetProcAddress( shell32, (LPCSTR)188)))
|
(pShellDDEInit = (void *)GetProcAddress( shell32, (LPCSTR)188)))
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#define __WINE_EXPLORER_PRIVATE_H
|
#define __WINE_EXPLORER_PRIVATE_H
|
||||||
|
|
||||||
extern void manage_desktop( WCHAR *arg );
|
extern void manage_desktop( WCHAR *arg );
|
||||||
extern void initialize_systray( BOOL using_root );
|
extern void initialize_systray( HMODULE graphics_driver, BOOL using_root );
|
||||||
extern void initialize_appbar(void);
|
extern void initialize_appbar(void);
|
||||||
|
|
||||||
#endif /* __WINE_EXPLORER_PRIVATE_H */
|
#endif /* __WINE_EXPLORER_PRIVATE_H */
|
||||||
|
|
|
@ -629,14 +629,12 @@ static LRESULT WINAPI tray_wndproc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM l
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this function creates the listener window */
|
/* this function creates the listener window */
|
||||||
void initialize_systray( BOOL using_root )
|
void initialize_systray( HMODULE graphics_driver, BOOL using_root )
|
||||||
{
|
{
|
||||||
HMODULE x11drv;
|
|
||||||
WNDCLASSEXW class;
|
WNDCLASSEXW class;
|
||||||
static const WCHAR classname[] = {'S','h','e','l','l','_','T','r','a','y','W','n','d',0};
|
static const WCHAR classname[] = {'S','h','e','l','l','_','T','r','a','y','W','n','d',0};
|
||||||
|
|
||||||
if ((x11drv = GetModuleHandleA( "winex11.drv" )))
|
wine_notify_icon = (void *)GetProcAddress( graphics_driver, "wine_notify_icon" );
|
||||||
wine_notify_icon = (void *)GetProcAddress( x11drv, "wine_notify_icon" );
|
|
||||||
|
|
||||||
icon_cx = GetSystemMetrics( SM_CXSMICON ) + 2*ICON_BORDER;
|
icon_cx = GetSystemMetrics( SM_CXSMICON ) + 2*ICON_BORDER;
|
||||||
icon_cy = GetSystemMetrics( SM_CYSMICON ) + 2*ICON_BORDER;
|
icon_cy = GetSystemMetrics( SM_CYSMICON ) + 2*ICON_BORDER;
|
||||||
|
@ -651,7 +649,7 @@ void initialize_systray( BOOL using_root )
|
||||||
class.hIcon = LoadIconW(0, (LPCWSTR)IDI_WINLOGO);
|
class.hIcon = LoadIconW(0, (LPCWSTR)IDI_WINLOGO);
|
||||||
class.hCursor = LoadCursorW(0, (LPCWSTR)IDC_ARROW);
|
class.hCursor = LoadCursorW(0, (LPCWSTR)IDC_ARROW);
|
||||||
class.hbrBackground = (HBRUSH) COLOR_WINDOW;
|
class.hbrBackground = (HBRUSH) COLOR_WINDOW;
|
||||||
class.lpszClassName = (WCHAR *) &classname;
|
class.lpszClassName = classname;
|
||||||
|
|
||||||
if (!RegisterClassExW(&class))
|
if (!RegisterClassExW(&class))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue