annotate plugins/win32/winprefs/gtkappbar.c @ 10550:522cd02f235f

[gaim-migrate @ 11924] This should fix the annoying problem of the docked buddy list stealing screen real estate when it is hidden. Turns out it was actually using the section of the screen, you just couldn't see it. I think this is the last of the bugs that I introduced into the docking stuff. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Fri, 28 Jan 2005 05:01:24 +0000
parents f348b3439ce4
children 12f6164ee2c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
1 /*
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
2 * gaim - WinGaim Options Plugin
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
3 *
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
4 * File: gtkappbar.c
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
5 * Date: August 2, 2003
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
6 * Description: Appbar functionality for Windows GTK+ applications
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
7 *
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
8 * Copyright (C) 2003, Herman Bloggs <hermanator12002@yahoo.com>
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
9 *
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
13 * (at your option) any later version.
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
14 *
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
18 * GNU General Public License for more details.
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
19 *
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
23 *
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
24 */
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
25 /*
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
26 * TODO:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
27 * - Move 'App on top' feature from Trans plugin to here
8735
92cbf9713795 [gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents: 6436
diff changeset
28 * - Bug: Multiple Show/Hide Desktop calls causes client area to disappear
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
29 */
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
30 #include <windows.h>
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
31 #include <winver.h>
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
32 #include <stdio.h>
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
33 #include <gtk/gtk.h>
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
34 #include <gdk/gdkwin32.h>
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
35 #include "gtkappbar.h"
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
36 #include "debug.h"
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
37
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
38 #define APPBAR_CALLBACK WM_USER + 1010
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
39
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
40 typedef HMONITOR WINAPI gaim_MonitorFromPoint(POINT, DWORD);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
41 typedef HMONITOR WINAPI gaim_MonitorFromWindow(HWND, DWORD);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
42 typedef BOOL WINAPI gaim_GetMonitorInfo(HMONITOR, LPMONITORINFO);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
43
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
44 /* Retrieve the rectangular display area from the specified monitor
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
45 * Return TRUE if successful, otherwise FALSE
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
46 */
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
47 static gboolean
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
48 get_rect_from_monitor(HMODULE hmod, HMONITOR monitor, RECT *rect) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
49 gaim_GetMonitorInfo *the_GetMonitorInfo;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
50
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
51 if (!(the_GetMonitorInfo = (gaim_GetMonitorInfo*)
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
52 GetProcAddress(hmod, "GetMonitorInfoA"))) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
53 return FALSE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
54 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
55
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
56 MONITORINFO info;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
57 info.cbSize = sizeof(info);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
58 if (!the_GetMonitorInfo(monitor, &info)) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
59 return FALSE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
60 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
61
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
62 CopyRect(rect, &(info.rcMonitor));
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
63
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
64 return TRUE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
65 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
66
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
67 /**
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
68 * This will only work on Win98+ and Win2K+
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
69 * Return TRUE if successful, otherwise FALSE
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
70 */
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
71 static gboolean
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
72 get_rect_at_point_multimonitor(POINT pt, RECT *rect) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
73 HMODULE hmod;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
74
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
75 if (!(hmod = GetModuleHandle("user32"))) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
76 return FALSE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
77 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
78
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
79 gaim_MonitorFromPoint *the_MonitorFromPoint;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
80 if (!(the_MonitorFromPoint = (gaim_MonitorFromPoint*)
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
81 GetProcAddress(hmod, "MonitorFromPoint"))) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
82 return FALSE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
83 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
84
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
85 HMONITOR monitor =
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
86 the_MonitorFromPoint(pt, MONITOR_DEFAULTTOPRIMARY);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
87
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
88 return get_rect_from_monitor(hmod, monitor, rect);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
89 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
90
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
91 /**
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
92 * This will only work on Win98+ and Win2K+
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
93 * Return TRUE if successful, otherwise FALSE
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
94 */
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
95 static gboolean
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
96 get_rect_of_window_multimonitor(HWND window, RECT *rect) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
97 HMODULE hmod;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
98
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
99 if (!(hmod = GetModuleHandle("user32"))) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
100 return FALSE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
101 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
102
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
103 gaim_MonitorFromWindow *the_MonitorFromWindow;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
104 if (!(the_MonitorFromWindow = (gaim_MonitorFromWindow*)
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
105 GetProcAddress(hmod, "MonitorFromWindow"))) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
106 return FALSE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
107 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
108
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
109 HMONITOR monitor =
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
110 the_MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
111
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
112 return get_rect_from_monitor(hmod, monitor, rect);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
113 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
114
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
115 /*
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
116 * Fallback if cannot get the RECT from the monitor directly
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
117 */
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
118 static void get_default_workarea(RECT *rect) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
119 if (!SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, FALSE)) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
120 /* I don't think this will ever happen */
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
121 rect->left = 0;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
122 rect->top = 0;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
123 rect->bottom = GetSystemMetrics(SM_CYSCREEN);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
124 rect->right = GetSystemMetrics(SM_CXSCREEN);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
125 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
126 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
127
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
128 /* Retrieve the rectangle of the active work area at a point */
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
129 static RECT get_rect_at_point(POINT pt) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
130 RECT rc;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
131 if (!get_rect_at_point_multimonitor(pt, &rc)) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
132 get_default_workarea(&rc);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
133 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
134 return rc;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
135 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
136
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
137 /* Retrieve the rectangle of the active work area of a window*/
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
138 static RECT get_rect_of_window(HWND window) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
139 RECT rc;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
140 if (!get_rect_of_window_multimonitor(window, &rc)) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
141 get_default_workarea(&rc);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
142 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
143 return rc;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
144 }
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
145
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
146 static void get_window_normal_rc(HWND hwnd, RECT *rc) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
147 WINDOWPLACEMENT wplc;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
148 GetWindowPlacement(hwnd, &wplc);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
149 CopyRect(rc, &wplc.rcNormalPosition);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
150 }
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
151 #if 0
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
152 static void print_rect(RECT *rc) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
153 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "RECT: L:%ld R:%ld T:%ld B:%ld\n",
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
154 rc->left, rc->right, rc->top, rc->bottom);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
155 }
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
156 #endif
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
157 /** Set the window style to be the "Tool Window" style - small header, no min/max buttons */
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
158 static void set_toolbar(HWND hwnd, gboolean val) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
159 LONG style=0;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
160
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
161 style = GetWindowLong(hwnd, GWL_EXSTYLE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
162 if(val && !(style & WS_EX_TOOLWINDOW))
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
163 style |= WS_EX_TOOLWINDOW;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
164 else if(!val && style & WS_EX_TOOLWINDOW)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
165 style &= ~WS_EX_TOOLWINDOW;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
166 else
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
167 return;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
168 SetWindowLong(hwnd, GWL_EXSTYLE, style);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
169 SetWindowPos(hwnd, 0, 0, 0, 0, 0,
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
170 SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
171
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
172 /* This really should be the following, but SWP_FRAMECHANGED strangely causes initermittent problems "Show Desktop" done more than once.
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
173 * Not having SWP_FRAMECHANGED *should* cause the Style not to be applied, but i haven't noticed any problems
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
174 * SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
175 */
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
176 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
177 /** Register the window as an appbar */
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
178 static gboolean gtk_appbar_register(GtkAppBar *ab, HWND hwnd) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
179 APPBARDATA abd;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
180
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
181 abd.cbSize = sizeof(APPBARDATA);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
182 abd.hWnd = hwnd;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
183 abd.uCallbackMessage = APPBAR_CALLBACK;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
184
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
185 ab->registered = SHAppBarMessage(ABM_NEW, &abd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
186
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
187 return ab->registered;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
188 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
189 /** Unregister the window as an appbar */
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
190 static gboolean gtk_appbar_unregister(GtkAppBar *ab, HWND hwnd) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
191 APPBARDATA abd;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
192
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
193 if(!ab->registered)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
194 return TRUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
195
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
196 abd.cbSize = sizeof(APPBARDATA);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
197 abd.hWnd = hwnd;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
198
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
199 SHAppBarMessage(ABM_REMOVE, &abd); /** This always returns TRUE */
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
200
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
201 ab->registered = FALSE;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
202
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
203 ab->docked = FALSE;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
204 ab->docking = FALSE;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
205
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
206 return TRUE;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
207 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
208
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
209 static void gtk_appbar_querypos(GtkAppBar *ab, HWND hwnd, RECT rcWorkspace) {
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
210 APPBARDATA abd;
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
211 guint iWidth = 0;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
212
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
213 if(!ab->registered)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
214 gtk_appbar_register(ab, hwnd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
215
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
216 abd.hWnd = hwnd;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
217 abd.cbSize = sizeof(APPBARDATA);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
218 abd.uEdge = ab->side;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
219
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
220 iWidth = ab->docked_rect.right - ab->docked_rect.left;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
221
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
222 abd.rc.top = rcWorkspace.top;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
223 abd.rc.bottom = rcWorkspace.bottom;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
224 switch (abd.uEdge)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
225 {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
226 case ABE_LEFT:
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
227 abd.rc.left = rcWorkspace.left;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
228 abd.rc.right = rcWorkspace.left + iWidth;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
229 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
230
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
231 case ABE_RIGHT:
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
232 abd.rc.right = rcWorkspace.right;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
233 abd.rc.left = rcWorkspace.right - iWidth;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
234 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
235 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
236
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
237 /* Ask the system for the screen space */
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
238 SHAppBarMessage(ABM_QUERYPOS, &abd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
239
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
240 switch (abd.uEdge)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
241 {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
242 case ABE_LEFT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
243 abd.rc.right = abd.rc.left + iWidth;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
244 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
245
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
246 case ABE_RIGHT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
247 abd.rc.left = abd.rc.right - iWidth;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
248 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
249 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
250
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
251 CopyRect(&(ab->docked_rect), &abd.rc);
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
252 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
253 /* Actually set the size and screen location of the appbar */
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
254 static void gtk_appbar_setpos(GtkAppBar *ab, HWND hwnd) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
255 APPBARDATA abd;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
256
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
257 if(!ab->registered)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
258 gtk_appbar_register(ab, hwnd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
259
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
260 abd.hWnd = hwnd;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
261 abd.cbSize = sizeof(APPBARDATA);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
262 CopyRect(&abd.rc, &(ab->docked_rect));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
263 abd.uEdge = ab->side;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
264
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
265 SHAppBarMessage(ABM_SETPOS, &abd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
266 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
267 /** Let any callbacks know that we have docked or undocked */
6436
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
268 static void gtk_appbar_dispatch_dock_cbs(GtkAppBar *ab, gboolean val) {
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
269 GList *lst = ab->dock_cbs;
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
270
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
271 while(lst) {
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
272 GtkAppBarDockCB dock_cb = lst->data;
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
273 dock_cb(val);
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
274 lst = lst->next;
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
275 }
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
276 }
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
277
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
278 static GdkFilterReturn wnd_moving(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
279 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
280 POINT cp;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
281 RECT *rc = (RECT*)msg->lParam;
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
282 RECT monRect;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
283 int side = -1;
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
284 long dockAreaWidth = 0;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
285
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
286 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_moving\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
287
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
288 GetCursorPos(&cp);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
289 monRect = get_rect_at_point(cp);
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
290
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
291 dockAreaWidth = (monRect.right - monRect.left) / 10;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
292 /* Which part of the screen are we in ? */
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
293 if (cp.x > (monRect.right - dockAreaWidth)) {
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
294 side = ABE_RIGHT;
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
295 } else if (cp.x < (monRect.left + dockAreaWidth)) {
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
296 side = ABE_LEFT;
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
297 }
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
298
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
299 if(!ab->docked) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
300 if( (side == ABE_RIGHT || side == ABE_LEFT) ) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
301 if( !ab->docking ) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
302 ab->side = side;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
303 GetWindowRect(msg->hwnd, &(ab->docked_rect));
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
304 gtk_appbar_querypos(ab, msg->hwnd, monRect);
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
305
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
306 /* save pre-docking height */
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
307 ab->undocked_height = rc->bottom - rc->top;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
308 ab->docking = TRUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
309 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
310 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
311 else
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
312 ab->docking = FALSE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
313 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
314 else if(side < 0) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
315 gtk_appbar_unregister(ab, msg->hwnd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
316 rc->bottom = rc->top + ab->undocked_height;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
317 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
318
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
319 /* Switch to toolbar/regular caption*/
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
320 if(ab->docking)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
321 set_toolbar(msg->hwnd, TRUE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
322 else if(!ab->docked)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
323 set_toolbar(msg->hwnd, FALSE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
324
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
325 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
326 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
327
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
328 static GdkFilterReturn wnd_sizing(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
329 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
330
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
331 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_sizing\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
332 if(ab->docked) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
333 RECT *rc = (RECT*)msg->lParam;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
334 if(ab->side == ABE_LEFT && msg->wParam == WMSZ_RIGHT) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
335 ab->docked_rect.right = rc->right;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
336 gtk_appbar_setpos(ab, msg->hwnd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
337 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
338 else if(ab->side == ABE_RIGHT && msg->wParam == WMSZ_LEFT) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
339 ab->docked_rect.left = rc->left;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
340 gtk_appbar_setpos(ab, msg->hwnd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
341 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
342 return GDK_FILTER_REMOVE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
343 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
344 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
345 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
346 /** Notify the system that the appbar has been activated */
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
347 static GdkFilterReturn wnd_activate(GtkAppBar *ab, GdkXEvent *xevent) {
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
348 if (ab->registered) {
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
349 APPBARDATA abd;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
350 MSG *msg = (MSG*)xevent;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
351 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_activate\n");
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
352
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
353 abd.hWnd = msg->hwnd;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
354 abd.cbSize = sizeof(APPBARDATA);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
355
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
356 SHAppBarMessage(ABM_ACTIVATE, &abd);
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
357 }
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
358 return GDK_FILTER_CONTINUE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
359 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
360 /** Notify the system that the appbar's position has changed */
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
361 static GdkFilterReturn wnd_poschanged(GtkAppBar *ab, GdkXEvent *xevent) {
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
362 if (ab->registered) {
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
363 APPBARDATA abd;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
364 MSG *msg = (MSG*)xevent;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
365 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_poschanged\n");
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
366
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
367 abd.hWnd = msg->hwnd;
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
368 abd.cbSize = sizeof(APPBARDATA);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
369
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
370 SHAppBarMessage(ABM_WINDOWPOSCHANGED, &abd);
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
371 }
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
372 return GDK_FILTER_CONTINUE;
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
373 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
374 /** The window is about to change */
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
375 static GdkFilterReturn wnd_poschanging(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
376 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
377 WINDOWPOS *wpos = (WINDOWPOS*)msg->lParam;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
378
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
379 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_poschanging\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
380
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
381 if(ab->docked || ab->docking) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
382 wpos->x = ab->docked_rect.left;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
383 wpos->y = ab->docked_rect.top;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
384 wpos->cx = ab->docked_rect.right - ab->docked_rect.left;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
385 wpos->cy = ab->docked_rect.bottom - ab->docked_rect.top;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
386 if(IsIconic(msg->hwnd))
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
387 set_toolbar(msg->hwnd, FALSE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
388 /*return GDK_FILTER_REMOVE;*/
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
389 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
390 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
391 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
392
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
393 static GdkFilterReturn wnd_exitsizemove(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
394 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
395
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
396 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_exitsizemove\n");
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
397 if(ab->docking) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
398 gtk_appbar_setpos(ab, msg->hwnd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
399 ab->docking = FALSE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
400 ab->docked = TRUE;
6436
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
401 gtk_appbar_dispatch_dock_cbs(ab, TRUE);
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
402 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
403 else if(!ab->docked) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
404 gtk_appbar_unregister(ab, msg->hwnd);
6436
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
405 gtk_appbar_dispatch_dock_cbs(ab, FALSE);
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
406 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
407
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
408 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
409 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
410
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
411 static GdkFilterReturn wnd_showwindow(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
412 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
413
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
414 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_showwindow\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
415 if(msg->wParam && ab->docked) {
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
416 ab->iconized = FALSE;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
417 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "shown\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
418 ab->docked = FALSE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
419 gtk_appbar_dock(ab, ab->side);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
420 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
421 else if(!msg->wParam && ab->docked) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
422 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "hidden\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
423 gtk_appbar_unregister(ab, GDK_WINDOW_HWND(ab->win->window));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
424 set_toolbar(GDK_WINDOW_HWND(ab->win->window), FALSE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
425 ab->docked = TRUE;
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
426 ab->iconized = TRUE;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
427 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
428 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
429 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
430 /** The window's size has changed */
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
431 static GdkFilterReturn wnd_size(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
432 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
433
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
434 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_size\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
435
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
436 if(msg->wParam == SIZE_MINIMIZED) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
437 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "Minimize\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
438 if(ab->docked) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
439 gtk_appbar_unregister(ab, GDK_WINDOW_HWND(ab->win->window));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
440 ab->docked = TRUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
441 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
442 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
443 else if(msg->wParam == SIZE_RESTORED) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
444 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "Restore\n");
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
445 if (!ab->iconized && ab->docked) {
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
446 gtk_appbar_dock(ab, ab->side);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
447 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
448 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
449 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
450 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
451
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
452 static GdkFilterReturn wnd_nchittest(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
453 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
454
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
455 if(ab->docked) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
456 UINT ret = DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
457
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
458 switch(ret) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
459 case HTBOTTOM:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
460 case HTBOTTOMLEFT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
461 case HTBOTTOMRIGHT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
462 case HTTOP:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
463 case HTTOPLEFT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
464 case HTTOPRIGHT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
465 return GDK_FILTER_REMOVE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
466 case HTLEFT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
467 if(ab->side == ABE_LEFT)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
468 return GDK_FILTER_REMOVE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
469 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
470 case HTRIGHT:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
471 if(ab->side == ABE_RIGHT)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
472 return GDK_FILTER_REMOVE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
473 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
474 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
475 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
476 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
477 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
478
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
479 #if 0
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
480 static GdkFilterReturn wnd_initmenupopup(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
481 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
482
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
483 if(ab->docked && HIWORD(msg->lParam)) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
484 HMENU sysmenu = GetSystemMenu(msg->hwnd, FALSE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
485 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "wnd_initpopupmenu: docked: %d ismenu: %d\n", ab->docked, IsMenu(sysmenu));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
486 if(EnableMenuItem(sysmenu, SC_MAXIMIZE, MF_BYCOMMAND|MF_GRAYED)<0)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
487 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "SC_MAXIMIZE Menu item does not exist\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
488 if(EnableMenuItem(sysmenu, SC_MOVE, MF_BYCOMMAND|MF_GRAYED)<0)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
489 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "SC_MOVE Menu item does not exist\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
490 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
491 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
492 else
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
493 GetSystemMenu(msg->hwnd, TRUE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
494 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
495 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
496 #endif
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
497
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
498 static GdkFilterReturn gtk_appbar_callback(GtkAppBar *ab, GdkXEvent *xevent) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
499 MSG *msg = (MSG*)xevent;
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
500 RECT orig;
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
501
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
502 switch (msg->wParam) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
503 case ABN_STATECHANGE:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
504 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "gtk_appbar_callback: ABN_STATECHANGE\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
505 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
506
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
507 case ABN_FULLSCREENAPP:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
508 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "gtk_appbar_callback: ABN_FULLSCREENAPP: %d\n", (BOOL)msg->lParam);
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
509 if (!ab->iconized && ab->docked) {
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
510 if ((BOOL)msg->lParam) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
511 SetWindowPos(msg->hwnd, HWND_BOTTOM, 0, 0, 0, 0,
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
512 SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
513 } else {
10538
f348b3439ce4 [gaim-migrate @ 11892]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10531
diff changeset
514 SetWindowPos(msg->hwnd, HWND_NOTOPMOST, 0, 0, 0, 0,
f348b3439ce4 [gaim-migrate @ 11892]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10531
diff changeset
515 SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_FRAMECHANGED);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
516 }
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
517 }
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
518
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
519 break;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
520
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
521 case ABN_POSCHANGED:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
522 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "gtk_appbar_callback: ABN_POSCHANGED\n");
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
523 CopyRect(&orig, &(ab->docked_rect));
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
524 gtk_appbar_querypos(ab, msg->hwnd, get_rect_of_window(msg->hwnd));
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
525 if (EqualRect(&orig, &(ab->docked_rect)) == 0) {
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
526 MoveWindow(msg->hwnd, ab->docked_rect.left, ab->docked_rect.top,
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
527 ab->docked_rect.right - ab->docked_rect.left,
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
528 ab->docked_rect.bottom - ab->docked_rect.top, TRUE);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
529 }
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
530 gtk_appbar_setpos(ab, msg->hwnd);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
531 break;
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
532 #if 0
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
533 default:
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
534 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "gtk_appbar_callback: %d\n", msg->wParam);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
535 #endif
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
536 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
537 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
538 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
539
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
540 static GdkFilterReturn gtk_appbar_event_filter(GdkXEvent *xevent, GdkEvent *event, gpointer data) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
541 MSG *msg = (MSG*)xevent;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
542
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
543 /*printf("MSG: %s\n", message_to_string (msg->message));*/
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
544 switch(msg->message) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
545 case WM_EXITSIZEMOVE:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
546 return wnd_exitsizemove(data, xevent);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
547 case WM_WINDOWPOSCHANGING:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
548 return wnd_poschanging(data, xevent);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
549 case WM_WINDOWPOSCHANGED:
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
550 return wnd_poschanged(data, xevent);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
551 case WM_ACTIVATE:
10550
522cd02f235f [gaim-migrate @ 11924]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10538
diff changeset
552 return wnd_activate(data, xevent);
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
553 case WM_SIZING:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
554 return wnd_sizing(data, xevent);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
555 case WM_MOVING:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
556 return wnd_moving(data, xevent);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
557 case WM_SHOWWINDOW:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
558 return wnd_showwindow(data, xevent);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
559 case WM_NCHITTEST:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
560 return wnd_nchittest(data, xevent);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
561 #if 0
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
562 case WM_INITMENUPOPUP:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
563 return wnd_initmenupopup(data, xevent);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
564 #endif
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
565 case WM_SIZE:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
566 return wnd_size(data, xevent);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
567 case APPBAR_CALLBACK:
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
568 return gtk_appbar_callback(data, xevent);
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
569 #if 0
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
570 default:
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
571 gaim_debug_info("gtkappbar", "gtk_appbar_event_filter %d\n", msg->message);
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
572 #endif
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
573 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
574 return GDK_FILTER_CONTINUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
575 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
576
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
577 void gtk_appbar_dock(GtkAppBar *ab, UINT side) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
578 RECT orig;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
579
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
580 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "gtk_appbar_dock\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
581
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
582 if(!ab || !IsWindow(GDK_WINDOW_HWND(ab->win->window)))
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
583 return;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
584
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
585 ab->side = side;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
586 get_window_normal_rc(GDK_WINDOW_HWND(ab->win->window), &(ab->docked_rect));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
587 CopyRect(&orig, &(ab->docked_rect));
10531
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
588 gtk_appbar_querypos(ab, GDK_WINDOW_HWND(ab->win->window),
940f0d8ce380 [gaim-migrate @ 11858]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 9795
diff changeset
589 get_rect_of_window(GDK_WINDOW_HWND(ab->win->window)));
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
590 if(EqualRect(&orig, &(ab->docked_rect)) == 0)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
591 MoveWindow(GDK_WINDOW_HWND(ab->win->window),
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
592 ab->docked_rect.left,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
593 ab->docked_rect.top,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
594 ab->docked_rect.right - ab->docked_rect.left,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
595 ab->docked_rect.bottom - ab->docked_rect.top, TRUE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
596 gtk_appbar_setpos(ab, GDK_WINDOW_HWND(ab->win->window));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
597 set_toolbar(GDK_WINDOW_HWND(ab->win->window), TRUE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
598 ab->docked = TRUE;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
599 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
600
6436
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
601 void gtk_appbar_add_dock_cb(GtkAppBar *ab, GtkAppBarDockCB dock_cb) {
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
602 if(!ab)
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
603 return;
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
604 ab->dock_cbs = g_list_append(ab->dock_cbs, dock_cb);
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
605 }
759a81390b36 [gaim-migrate @ 6944]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6409
diff changeset
606
6409
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
607 GtkAppBar *gtk_appbar_add(GtkWidget *win) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
608 GtkAppBar *ab;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
609
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
610 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "gtk_appbar_add\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
611
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
612 if(!win)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
613 return NULL;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
614 ab = g_new0(GtkAppBar, 1);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
615 ab->win = win;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
616
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
617 /* init docking coords */
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
618 get_window_normal_rc(GDK_WINDOW_HWND(win->window), &(ab->docked_rect));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
619
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
620 /* Add main window filter */
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
621 gdk_window_add_filter(win->window,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
622 gtk_appbar_event_filter,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
623 ab);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
624 return ab;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
625 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
626
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
627 void gtk_appbar_remove(GtkAppBar *ab) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
628 gaim_debug(GAIM_DEBUG_INFO, "gtkappbar", "gtk_appbar_remove\n");
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
629
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
630 if(!ab)
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
631 return;
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
632 gdk_window_remove_filter(ab->win->window,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
633 gtk_appbar_event_filter,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
634 ab);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
635 if(ab->docked) {
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
636 gtk_window_resize(GTK_WINDOW(ab->win),
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
637 ab->docked_rect.right - ab->docked_rect.left,
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
638 ab->undocked_height);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
639 set_toolbar(GDK_WINDOW_HWND(ab->win->window), FALSE);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
640 }
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
641 gtk_appbar_unregister(ab, GDK_WINDOW_HWND(ab->win->window));
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
642
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
643 g_free(ab);
752d0600b514 [gaim-migrate @ 6915]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff changeset
644 }