Repository navigation
Expand file tree
/
Copy pathwindow_utils_win.pyx
More file actions
114 lines (89 loc) · 4.6 KB
/
Copy pathwindow_utils_win.pyx
File metadata and controls
114 lines (89 loc) · 4.6 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
# 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 win32gui.DefWindowProc(windowHandle, msg, wparam, lparam)
cdef HWND innerHwnd = <HWND><int>int(pyBrowser.GetWindowHandle())
cdef RECT rect2
GetClientRect(<HWND><int>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 win32gui.DefWindowProc(windowHandle, msg, wparam, lparam)
@staticmethod
def OnEraseBackground(int windowHandle, long msg, long wparam, long lparam):
cdef PyBrowser pyBrowser = GetBrowserByWindowHandle(windowHandle)
if not pyBrowser:
return win32gui.DefWindowProc(windowHandle, msg, wparam, lparam)
# Dont erase the background if the browser window has been loaded,
# this avoids flashing.
if pyBrowser.GetWindowHandle():
return 0
return win32gui.DefWindowProc(windowHandle, msg, wparam, lparam)
@staticmethod
def SetTitle(PyBrowser pyBrowser, py_string 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
if pyBrowser.GetUserData("__outerWindowHandle"):
windowHandle = pyBrowser.GetUserData("__outerWindowHandle")
else:
windowHandle = pyBrowser.GetWindowHandle()
assert windowHandle, ("WindowUtils.SetTitle() failed: windowHandle is empty")
currentTitle = win32gui.GetWindowText(windowHandle)
if pyBrowser.GetUserData("__outerWindowHandle"):
if not currentTitle:
win32gui.SetWindowText(windowHandle, pyTitle)
else:
# For independent popups we always change title to what page
# is displayed currently.
win32gui.SetWindowText(windowHandle, pyTitle)
@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 = win32api.SendMessage(
windowHandle, win32con.WM_GETICON, win32con.ICON_BIG, 0)
iconSmall = win32api.SendMessage(
windowHandle, win32con.WM_GETICON, win32con.ICON_SMALL, 0)
if not iconBig and not iconSmall:
parentWindowHandle = pyBrowser.GetOpenerWindowHandle()
parentIconBig = win32api.SendMessage(
parentWindowHandle, win32con.WM_GETICON, win32con.ICON_BIG, 0)
parentIconSmall = win32api.SendMessage(
parentWindowHandle, win32con.WM_GETICON, win32con.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 = win32gui.GetParent(parentWindowHandle)
Debug("WindowUtils.SetIcon(): popup inherits icon from "
"parent window: %s" % parentWindowHandle)
parentIconBig = win32api.SendMessage(
parentWindowHandle, win32con.WM_GETICON, win32con.ICON_BIG, 0)
parentIconSmall = win32api.SendMessage(
parentWindowHandle, win32con.WM_GETICON, win32con.ICON_SMALL, 0)
if parentIconBig:
win32api.SendMessage(
windowHandle, win32con.WM_SETICON, win32con.ICON_BIG,
parentIconBig)
if parentIconSmall:
win32api.SendMessage(
windowHandle, win32con.WM_SETICON, win32con.ICON_SMALL,
parentIconSmall)