Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
68f497bd
Commit
68f497bd
authored
Nov 01, 2010
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11: Improve management of the lifetime of embedded windows.
parent
8c963852
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
80 additions
and
3 deletions
+80
-3
event.c
dlls/winex11.drv/event.c
+66
-2
systray.c
dlls/winex11.drv/systray.c
+9
-0
window.c
dlls/winex11.drv/window.c
+2
-1
x11drv.h
dlls/winex11.drv/x11drv.h
+2
-0
x11drv_main.c
dlls/winex11.drv/x11drv_main.c
+1
-0
No files found.
dlls/winex11.drv/event.c
View file @
68f497bd
...
@@ -72,11 +72,26 @@ extern BOOL ximInComposeMode;
...
@@ -72,11 +72,26 @@ extern BOOL ximInComposeMode;
#define DndURL 128
/* KDE drag&drop */
#define DndURL 128
/* KDE drag&drop */
#define XEMBED_EMBEDDED_NOTIFY 0
#define XEMBED_WINDOW_ACTIVATE 1
#define XEMBED_WINDOW_DEACTIVATE 2
#define XEMBED_REQUEST_FOCUS 3
#define XEMBED_FOCUS_IN 4
#define XEMBED_FOCUS_OUT 5
#define XEMBED_FOCUS_NEXT 6
#define XEMBED_FOCUS_PREV 7
#define XEMBED_MODALITY_ON 10
#define XEMBED_MODALITY_OFF 11
#define XEMBED_REGISTER_ACCELERATOR 12
#define XEMBED_UNREGISTER_ACCELERATOR 13
#define XEMBED_ACTIVATE_ACCELERATOR 14
/* Event handlers */
/* Event handlers */
static
void
X11DRV_FocusIn
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_FocusIn
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_FocusOut
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_FocusOut
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_Expose
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_Expose
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_MapNotify
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_MapNotify
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_ReparentNotify
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_ConfigureNotify
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_ConfigureNotify
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_PropertyNotify
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_PropertyNotify
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_ClientMessage
(
HWND
hwnd
,
XEvent
*
event
);
static
void
X11DRV_ClientMessage
(
HWND
hwnd
,
XEvent
*
event
);
...
@@ -111,7 +126,7 @@ static struct event_handler handlers[MAX_EVENT_HANDLERS] =
...
@@ -111,7 +126,7 @@ static struct event_handler handlers[MAX_EVENT_HANDLERS] =
/* UnmapNotify */
/* UnmapNotify */
{
MapNotify
,
X11DRV_MapNotify
},
{
MapNotify
,
X11DRV_MapNotify
},
/* MapRequest */
/* MapRequest */
/* ReparentNotify */
{
ReparentNotify
,
X11DRV_ReparentNotify
},
{
ConfigureNotify
,
X11DRV_ConfigureNotify
},
{
ConfigureNotify
,
X11DRV_ConfigureNotify
},
/* ConfigureRequest */
/* ConfigureRequest */
/* GravityNotify */
/* GravityNotify */
...
@@ -127,7 +142,7 @@ static struct event_handler handlers[MAX_EVENT_HANDLERS] =
...
@@ -127,7 +142,7 @@ static struct event_handler handlers[MAX_EVENT_HANDLERS] =
{
MappingNotify
,
X11DRV_MappingNotify
},
{
MappingNotify
,
X11DRV_MappingNotify
},
};
};
static
int
nb_event_handlers
=
1
8
;
/* change this if you add handlers above */
static
int
nb_event_handlers
=
1
9
;
/* change this if you add handlers above */
/* return the name of an X event */
/* return the name of an X event */
...
@@ -814,6 +829,30 @@ static BOOL is_net_wm_state_maximized( Display *display, struct x11drv_win_data
...
@@ -814,6 +829,30 @@ static BOOL is_net_wm_state_maximized( Display *display, struct x11drv_win_data
/***********************************************************************
/***********************************************************************
* X11DRV_ReparentNotify
*/
static
void
X11DRV_ReparentNotify
(
HWND
hwnd
,
XEvent
*
xev
)
{
XReparentEvent
*
event
=
&
xev
->
xreparent
;
struct
x11drv_win_data
*
data
;
if
(
!
(
data
=
X11DRV_get_win_data
(
hwnd
)))
return
;
if
(
!
data
->
embedded
)
return
;
if
(
event
->
parent
==
root_window
)
{
TRACE
(
"%p/%lx reparented to root
\n
"
,
hwnd
,
data
->
whole_window
);
data
->
embedder
=
0
;
SendMessageW
(
hwnd
,
WM_CLOSE
,
0
,
0
);
}
else
{
TRACE
(
"%p/%lx reparented to %lx
\n
"
,
hwnd
,
data
->
whole_window
,
event
->
parent
);
data
->
embedder
=
event
->
parent
;
}
}
/***********************************************************************
* X11DRV_ConfigureNotify
* X11DRV_ConfigureNotify
*/
*/
void
X11DRV_ConfigureNotify
(
HWND
hwnd
,
XEvent
*
xev
)
void
X11DRV_ConfigureNotify
(
HWND
hwnd
,
XEvent
*
xev
)
...
@@ -1334,6 +1373,30 @@ static void EVENT_DropURLs( HWND hWnd, XClientMessageEvent *event )
...
@@ -1334,6 +1373,30 @@ static void EVENT_DropURLs( HWND hWnd, XClientMessageEvent *event )
}
}
}
}
/**********************************************************************
* handle_xembed_protocol
*/
static
void
handle_xembed_protocol
(
HWND
hwnd
,
XClientMessageEvent
*
event
)
{
struct
x11drv_win_data
*
data
=
X11DRV_get_win_data
(
hwnd
);
if
(
!
data
)
return
;
switch
(
event
->
data
.
l
[
1
])
{
case
XEMBED_EMBEDDED_NOTIFY
:
TRACE
(
"win %p/%lx XEMBED_EMBEDDED_NOTIFY owner %lx
\n
"
,
hwnd
,
event
->
window
,
event
->
data
.
l
[
3
]
);
data
->
embedder
=
event
->
data
.
l
[
3
];
break
;
default:
TRACE
(
"win %p/%lx XEMBED message %lu(%lu)
\n
"
,
hwnd
,
event
->
window
,
event
->
data
.
l
[
1
],
event
->
data
.
l
[
2
]
);
break
;
}
}
/**********************************************************************
/**********************************************************************
* handle_dnd_protocol
* handle_dnd_protocol
*/
*/
...
@@ -1366,6 +1429,7 @@ struct client_message_handler
...
@@ -1366,6 +1429,7 @@ struct client_message_handler
static
const
struct
client_message_handler
client_messages
[]
=
static
const
struct
client_message_handler
client_messages
[]
=
{
{
{
XATOM_WM_PROTOCOLS
,
handle_wm_protocols
},
{
XATOM_WM_PROTOCOLS
,
handle_wm_protocols
},
{
XATOM__XEMBED
,
handle_xembed_protocol
},
{
XATOM_DndProtocol
,
handle_dnd_protocol
},
{
XATOM_DndProtocol
,
handle_dnd_protocol
},
{
XATOM_XdndEnter
,
X11DRV_XDND_EnterEvent
},
{
XATOM_XdndEnter
,
X11DRV_XDND_EnterEvent
},
{
XATOM_XdndPosition
,
X11DRV_XDND_PositionEvent
},
{
XATOM_XdndPosition
,
X11DRV_XDND_PositionEvent
},
...
...
dlls/winex11.drv/systray.c
View file @
68f497bd
...
@@ -309,6 +309,15 @@ static LRESULT WINAPI tray_icon_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPAR
...
@@ -309,6 +309,15 @@ static LRESULT WINAPI tray_icon_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPAR
case
WM_TIMER
:
case
WM_TIMER
:
if
(
!
IsWindow
(
icon
->
owner
))
delete_icon
(
icon
);
if
(
!
IsWindow
(
icon
->
owner
))
delete_icon
(
icon
);
return
0
;
return
0
;
case
WM_CLOSE
:
if
(
icon
->
display
==
-
1
)
{
TRACE
(
"icon %u no longer embedded
\n
"
,
icon
->
id
);
hide_icon
(
icon
);
add_to_standalone_tray
(
icon
);
}
return
0
;
}
}
return
DefWindowProcW
(
hwnd
,
msg
,
wparam
,
lparam
);
return
DefWindowProcW
(
hwnd
,
msg
,
wparam
,
lparam
);
}
}
...
...
dlls/winex11.drv/window.c
View file @
68f497bd
...
@@ -1890,8 +1890,9 @@ void X11DRV_DestroyNotify( HWND hwnd, XEvent *event )
...
@@ -1890,8 +1890,9 @@ void X11DRV_DestroyNotify( HWND hwnd, XEvent *event )
if
(
!
(
data
=
X11DRV_get_win_data
(
hwnd
)))
return
;
if
(
!
(
data
=
X11DRV_get_win_data
(
hwnd
)))
return
;
FIXME
(
"window %p/%lx destroyed from the outside
\n
"
,
hwnd
,
data
->
whole_window
);
if
(
!
data
->
embedded
)
FIXME
(
"window %p/%lx destroyed from the outside
\n
"
,
hwnd
,
data
->
whole_window
);
destroy_whole_window
(
display
,
data
,
TRUE
);
destroy_whole_window
(
display
,
data
,
TRUE
);
if
(
data
->
embedded
)
SendMessageW
(
hwnd
,
WM_CLOSE
,
0
,
0
);
}
}
...
...
dlls/winex11.drv/x11drv.h
View file @
68f497bd
...
@@ -660,6 +660,7 @@ enum x11drv_atoms
...
@@ -660,6 +660,7 @@ enum x11drv_atoms
XATOM__NET_WM_WINDOW_TYPE_NORMAL
,
XATOM__NET_WM_WINDOW_TYPE_NORMAL
,
XATOM__NET_WM_WINDOW_TYPE_UTILITY
,
XATOM__NET_WM_WINDOW_TYPE_UTILITY
,
XATOM__NET_WORKAREA
,
XATOM__NET_WORKAREA
,
XATOM__XEMBED
,
XATOM__XEMBED_INFO
,
XATOM__XEMBED_INFO
,
XATOM_XdndAware
,
XATOM_XdndAware
,
XATOM_XdndEnter
,
XATOM_XdndEnter
,
...
@@ -758,6 +759,7 @@ struct x11drv_win_data
...
@@ -758,6 +759,7 @@ struct x11drv_win_data
BOOL
shaped
:
1
;
/* is window using a custom region shape? */
BOOL
shaped
:
1
;
/* is window using a custom region shape? */
int
wm_state
;
/* current value of the WM_STATE property */
int
wm_state
;
/* current value of the WM_STATE property */
DWORD
net_wm_state
;
/* bit mask of active x11drv_net_wm_state values */
DWORD
net_wm_state
;
/* bit mask of active x11drv_net_wm_state values */
Window
embedder
;
/* window id of embedder */
unsigned
long
configure_serial
;
/* serial number of last configure request */
unsigned
long
configure_serial
;
/* serial number of last configure request */
HBITMAP
hWMIconBitmap
;
HBITMAP
hWMIconBitmap
;
HBITMAP
hWMIconMask
;
HBITMAP
hWMIconMask
;
...
...
dlls/winex11.drv/x11drv_main.c
View file @
68f497bd
...
@@ -160,6 +160,7 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] =
...
@@ -160,6 +160,7 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] =
"_NET_WM_WINDOW_TYPE_NORMAL"
,
"_NET_WM_WINDOW_TYPE_NORMAL"
,
"_NET_WM_WINDOW_TYPE_UTILITY"
,
"_NET_WM_WINDOW_TYPE_UTILITY"
,
"_NET_WORKAREA"
,
"_NET_WORKAREA"
,
"_XEMBED"
,
"_XEMBED_INFO"
,
"_XEMBED_INFO"
,
"XdndAware"
,
"XdndAware"
,
"XdndEnter"
,
"XdndEnter"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment