Repository navigation
Expand file tree
/
Copy pathwindow_utils_win.pyx
More file actions
127 lines (99 loc) · 4.81 KB
/
Copy pathwindow_utils_win.pyx
File metadata and controls
127 lines (99 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Copyright (c) 2012 CefPython Authors. All rights reserved.
# License: New BSD License.
# Website: http://code.google.com/p/cefpython/
class WindowUtils:
@staticmethod
def OnSetFocus(int windowHandle, long msg, long wparam, long lparam):
cdef PyBrowser pyBrowser = GetBrowserByWindowHandle(windowHandle)
if not pyBrowser:
return 0
pyBrowser.SetFocus(True)
return 0
@staticmethod
def OnSize(int windowHandle, long msg, long wparam, long lparam):
cdef PyBrowser pyBrowser = GetBrowserByWindowHandle(windowHandle)
if not pyBrowser:
return DefWindowProc(<HWND>windowHandle, msg, wparam, lparam)
cdef HWND innerHwnd = <HWND>pyBrowser.GetWindowHandle()
cdef RECT rect2
GetClientRect(<HWND>windowHandle, &rect2)
cdef HDWP hdwp = BeginDeferWindowPos(1)
hdwp = DeferWindowPos(hdwp, innerHwnd, NULL, rect2.left, rect2.top,
rect2.right - rect2.left, rect2.bottom - rect2.top, SWP_NOZORDER)
EndDeferWindowPos(hdwp)
return DefWindowProc(<HWND>windowHandle, msg, wparam, lparam)
@staticmethod
def OnEraseBackground(int windowHandle, long msg, long wparam, long lparam):
cdef PyBrowser pyBrowser = GetBrowserByWindowHandle(windowHandle)
if not pyBrowser:
return DefWindowProc(<HWND>windowHandle, msg, wparam, lparam)
# Dont erase the background if the browser window has been loaded,
# this avoids flashing.
if pyBrowser.GetWindowHandle():
return 0
return DefWindowProc(<HWND>windowHandle, msg, wparam, lparam)
@staticmethod
def SetTitle(PyBrowser pyBrowser, str pyTitle):
# Each browser window should have a title (Issue 3).
# When popup is created, the window that sits in taskbar has no title.
if not pyTitle:
return
cdef int windowHandle
if pyBrowser.GetUserData("__outerWindowHandle"):
windowHandle = pyBrowser.GetUserData("__outerWindowHandle")
else:
windowHandle = pyBrowser.GetWindowHandle()
assert windowHandle, ("WindowUtils.SetTitle() failed: windowHandle is empty")
cdef char* charCurrentTitle = <char*>calloc(100, sizeof(char))
cdef str currentTitle
GetWindowTextA(<HWND>windowHandle, charCurrentTitle, 100)
currentTitle = CharToPyString(charCurrentTitle)
free(charCurrentTitle)
cdef bytes bytesTitle
if str == bytes:
bytesTitle = <bytes>pyTitle
else:
bytesTitle = pyTitle.encode("utf-8")
cdef char* charTitle = bytesTitle
if pyBrowser.GetUserData("__outerWindowHandle"):
if not currentTitle:
SetWindowTextA(<HWND>windowHandle, charTitle)
else:
# For independent popups we always change title to what page
# is displayed currently.
SetWindowTextA(<HWND>windowHandle, charTitle)
@staticmethod
def SetIcon(PyBrowser pyBrowser, py_string icon="inherit"):
# `icon` parameter is not implemented.
# Popup window inherits icon from the main window.
if pyBrowser.GetUserData("__outerWindowHandle"):
return None
windowHandle = pyBrowser.GetWindowHandle()
assert windowHandle, ("WindowUtils.SetIcon() failed: windowHandle is empty")
iconBig = SendMessage(
<HWND>windowHandle, WM_GETICON, ICON_BIG, 0)
iconSmall = SendMessage(
<HWND>windowHandle, WM_GETICON, ICON_SMALL, 0)
cdef int parentWindowHandle
if not iconBig and not iconSmall:
parentWindowHandle = pyBrowser.GetOpenerWindowHandle()
parentIconBig = SendMessage(
<HWND>parentWindowHandle, WM_GETICON, ICON_BIG, 0)
parentIconSmall = SendMessage(
<HWND>parentWindowHandle, WM_GETICON, ICON_SMALL, 0)
# If parent is main application window, then GetOpenerWindowHandle()
# returned innerWindowHandle of the parent window, try again.
if not parentIconBig and not parentIconSmall:
parentWindowHandle = <int>GetParent(<HWND>parentWindowHandle)
Debug("WindowUtils.SetIcon(): popup inherits icon from "
"parent window: %s" % parentWindowHandle)
parentIconBig = SendMessage(
<HWND>parentWindowHandle, WM_GETICON, ICON_BIG, 0)
parentIconSmall = SendMessage(
<HWND>parentWindowHandle, WM_GETICON, ICON_SMALL, 0)
if parentIconBig:
SendMessage(
<HWND>windowHandle, WM_SETICON, ICON_BIG, parentIconBig)
if parentIconSmall:
SendMessage(
<HWND>windowHandle, WM_SETICON, ICON_SMALL, parentIconSmall)