[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/lineCode/cefpython/cefpython52/src/window_utils_win.pyx [Back]  [Original]

# Copyright (c) 2012-2014 The CEF Python authors. All rights reserved.
# License: New BSD License.
# Website: http://code.google.com/p/cefpython/

include "cefpython.pyx"

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(windowHandle, msg, wparam, lparam)

        cdef HWND innerHwnd = pyBrowser.GetWindowHandle()
        cdef RECT rect2
        GetClientRect(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(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(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(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 WindowHandle windowHandle
        if pyBrowser.GetUserData("__outerWindowHandle"):
            windowHandle = pyBrowser.GetUserData("__outerWindowHandle")
        else:
            windowHandle = pyBrowser.GetWindowHandle()

        assert windowHandle, (
                "WindowUtils.SetTitle() failed: windowHandle is empty")

        # Get window title.
        cdef int sizeOfTitle = 100
        cdef wchar_t* widecharTitle = (
                calloc(sizeOfTitle, wchar_t_size))
        GetWindowTextW(windowHandle, widecharTitle, sizeOfTitle)
        cdef str currentTitle = WidecharToPyString(widecharTitle)
        free(widecharTitle)

        # Must keep alive while c_str() is passed.
        cdef CefString cefTitle
        PyToCefString(pyTitle, cefTitle)

        if pyBrowser.GetUserData("__outerWindowHandle"):
            if not currentTitle:
                SetWindowTextW(windowHandle, cefTitle.ToWString().c_str())
        else:
            # For independent popups we always change title to what page
            # is displayed currently.
            SetWindowTextW(windowHandle, cefTitle.ToWString().c_str())

    @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(
                windowHandle, WM_GETICON, ICON_BIG, 0)
        iconSmall = SendMessage(
                windowHandle, WM_GETICON, ICON_SMALL, 0)

        cdef int parentWindowHandle

        if not iconBig and not iconSmall:
            parentWindowHandle = pyBrowser.GetOpenerWindowHandle()
            parentIconBig = SendMessage(
                    parentWindowHandle, WM_GETICON, ICON_BIG, 0)
            parentIconSmall = SendMessage(
                    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 = GetParent(parentWindowHandle)

            Debug("WindowUtils.SetIcon(): popup inherits icon from "
                    "parent window: %s" % parentWindowHandle)

            parentIconBig = SendMessage(
                    parentWindowHandle, WM_GETICON, ICON_BIG, 0)
            parentIconSmall = SendMessage(
                    parentWindowHandle, WM_GETICON, ICON_SMALL, 0)

            if parentIconBig:
                SendMessage(windowHandle, WM_SETICON,
                            ICON_BIG, parentIconBig)
            if parentIconSmall:
                SendMessage(windowHandle, WM_SETICON,
                            ICON_SMALL, parentIconSmall)

    @staticmethod
    def GetParentHandle(int windowHandle):
        return GetParent(windowHandle)

    @staticmethod
    def IsWindowHandle(int windowHandle):
        IF UNAME_SYSNAME == "Windows":
            return bool(IsWindow(windowHandle))
        ELSE:
            return False

Web Proxy Viewer  |  New URL  |  Original Page