Mercurial > pidgin
comparison src/win32/win32dep.c @ 3630:9682c0e022c6
[gaim-migrate @ 3753]
Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk.
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Fri, 11 Oct 2002 03:14:01 +0000 |
parents | |
children | 50ac7e205045 |
comparison
equal
deleted
inserted
replaced
3629:afc5bb164c5a | 3630:9682c0e022c6 |
---|---|
1 /* | |
2 * win32dep.c | |
3 * | |
4 * Author: Herman Bloggs <hermanator12002@yahoo.com> | |
5 * Date: June, 2002 | |
6 * Description: Windows dependant code for Gaim | |
7 */ | |
8 #include <windows.h> | |
9 #include <stdlib.h> | |
10 #include <stdio.h> | |
11 #include <glib.h> | |
12 #include "gaim.h" | |
13 | |
14 #include "stdafx.h" | |
15 #include "resource.h" | |
16 | |
17 /* | |
18 * DEFINES & MACROS | |
19 */ | |
20 #define WM_TRAYMESSAGE WM_USER | |
21 #define GAIM_SYSTRAY_HINT "Gaim Instant Messenger" | |
22 | |
23 /* | |
24 * LOCALS | |
25 */ | |
26 static char install_dir[MAXPATHLEN]; | |
27 static char lib_dir[MAXPATHLEN]; | |
28 static char locale_dir[MAXPATHLEN]; | |
29 static int bhide_icon; | |
30 | |
31 /* | |
32 * GLOBALS | |
33 */ | |
34 HINSTANCE g_hInstance = 0; | |
35 | |
36 /* | |
37 * STATIC CODE | |
38 */ | |
39 | |
40 static void ShowNotifyIcon(HWND hWnd,BOOL bAdd) | |
41 { | |
42 NOTIFYICONDATA nid; | |
43 ZeroMemory(&nid,sizeof(nid)); | |
44 nid.cbSize=sizeof(NOTIFYICONDATA); | |
45 nid.hWnd=hWnd; | |
46 nid.uID=0; | |
47 nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; | |
48 nid.uCallbackMessage=WM_TRAYMESSAGE; | |
49 nid.hIcon=LoadIcon(g_hInstance,MAKEINTRESOURCE(IDI_ICON2)); | |
50 lstrcpy(nid.szTip,TEXT(GAIM_SYSTRAY_HINT)); | |
51 | |
52 if(bAdd) | |
53 Shell_NotifyIcon(NIM_ADD,&nid); | |
54 else | |
55 Shell_NotifyIcon(NIM_DELETE,&nid); | |
56 } | |
57 | |
58 static GdkFilterReturn traymsg_filter_func( GdkXEvent *xevent, GdkEvent *event, gpointer data) | |
59 { | |
60 MSG *msg = (MSG*)xevent; | |
61 | |
62 if( msg->lParam == WM_LBUTTONDBLCLK ) { | |
63 RestoreWndFromTray(msg->hwnd); | |
64 bhide_icon = TRUE; | |
65 return GDK_FILTER_REMOVE; | |
66 } | |
67 | |
68 if( msg->lParam == WM_LBUTTONUP ) { | |
69 if(bhide_icon) { | |
70 ShowNotifyIcon(msg->hwnd,FALSE); | |
71 bhide_icon = FALSE; | |
72 } | |
73 } | |
74 return GDK_FILTER_REMOVE; | |
75 } | |
76 | |
77 /* | |
78 * PUBLIC CODE | |
79 */ | |
80 | |
81 char* wgaim_install_dir(void) { | |
82 HMODULE hmod; | |
83 char* buf; | |
84 | |
85 hmod = GetModuleHandle(NULL); | |
86 if( hmod == 0 ) { | |
87 buf = g_win32_error_message( GetLastError() ); | |
88 debug_printf("GetModuleHandle error: %s\n", buf); | |
89 free(buf); | |
90 return NULL; | |
91 } | |
92 if(GetModuleFileName( hmod, (char*)&install_dir, MAXPATHLEN ) == 0) { | |
93 buf = g_win32_error_message( GetLastError() ); | |
94 debug_printf("GetModuleFileName error: %s\n", buf); | |
95 free(buf); | |
96 return NULL; | |
97 } | |
98 buf = g_path_get_dirname( install_dir ); | |
99 strcpy( (char*)&install_dir, buf ); | |
100 free( buf ); | |
101 | |
102 return (char*)&install_dir; | |
103 } | |
104 | |
105 char* wgaim_lib_dir(void) { | |
106 strcpy(lib_dir, wgaim_install_dir()); | |
107 strcat(lib_dir, G_DIR_SEPARATOR_S "plugins"); | |
108 return (char*)&lib_dir; | |
109 } | |
110 | |
111 char* wgaim_locale_dir(void) { | |
112 strcpy(locale_dir, wgaim_install_dir()); | |
113 strcat(locale_dir, G_DIR_SEPARATOR_S "locale"); | |
114 return (char*)&locale_dir; | |
115 } | |
116 | |
117 GdkFilterReturn wgaim_window_filter( GdkXEvent *xevent, GdkEvent *event, gpointer data) | |
118 { | |
119 MSG *msg = (MSG*)xevent; | |
120 | |
121 switch( msg->message ) { | |
122 case WM_SYSCOMMAND: | |
123 if( msg->wParam == SC_MINIMIZE ) { | |
124 MinimizeWndToTray(msg->hwnd); | |
125 ShowNotifyIcon(msg->hwnd,TRUE); | |
126 | |
127 SetWindowLong(msg->hwnd,DWL_MSGRESULT,0); | |
128 return GDK_FILTER_REMOVE; | |
129 } | |
130 break; | |
131 case WM_CLOSE: | |
132 MinimizeWndToTray(msg->hwnd); | |
133 ShowNotifyIcon(msg->hwnd,TRUE); | |
134 return GDK_FILTER_REMOVE; | |
135 } | |
136 | |
137 return GDK_FILTER_CONTINUE; | |
138 } | |
139 | |
140 void wgaim_init(void) { | |
141 /* Filter to catch systray events */ | |
142 gdk_add_client_message_filter (GDK_POINTER_TO_ATOM (WM_TRAYMESSAGE), | |
143 traymsg_filter_func, | |
144 NULL); | |
145 } |