Mercurial > pidgin.yaz
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/win32/win32dep.c Fri Oct 11 03:14:01 2002 +0000 @@ -0,0 +1,145 @@ +/* + * win32dep.c + * + * Author: Herman Bloggs <hermanator12002@yahoo.com> + * Date: June, 2002 + * Description: Windows dependant code for Gaim + */ +#include <windows.h> +#include <stdlib.h> +#include <stdio.h> +#include <glib.h> +#include "gaim.h" + +#include "stdafx.h" +#include "resource.h" + +/* + * DEFINES & MACROS + */ +#define WM_TRAYMESSAGE WM_USER +#define GAIM_SYSTRAY_HINT "Gaim Instant Messenger" + +/* + * LOCALS + */ +static char install_dir[MAXPATHLEN]; +static char lib_dir[MAXPATHLEN]; +static char locale_dir[MAXPATHLEN]; +static int bhide_icon; + +/* + * GLOBALS + */ +HINSTANCE g_hInstance = 0; + +/* + * STATIC CODE + */ + +static void ShowNotifyIcon(HWND hWnd,BOOL bAdd) +{ + NOTIFYICONDATA nid; + ZeroMemory(&nid,sizeof(nid)); + nid.cbSize=sizeof(NOTIFYICONDATA); + nid.hWnd=hWnd; + nid.uID=0; + nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; + nid.uCallbackMessage=WM_TRAYMESSAGE; + nid.hIcon=LoadIcon(g_hInstance,MAKEINTRESOURCE(IDI_ICON2)); + lstrcpy(nid.szTip,TEXT(GAIM_SYSTRAY_HINT)); + + if(bAdd) + Shell_NotifyIcon(NIM_ADD,&nid); + else + Shell_NotifyIcon(NIM_DELETE,&nid); +} + +static GdkFilterReturn traymsg_filter_func( GdkXEvent *xevent, GdkEvent *event, gpointer data) +{ + MSG *msg = (MSG*)xevent; + + if( msg->lParam == WM_LBUTTONDBLCLK ) { + RestoreWndFromTray(msg->hwnd); + bhide_icon = TRUE; + return GDK_FILTER_REMOVE; + } + + if( msg->lParam == WM_LBUTTONUP ) { + if(bhide_icon) { + ShowNotifyIcon(msg->hwnd,FALSE); + bhide_icon = FALSE; + } + } + return GDK_FILTER_REMOVE; +} + +/* + * PUBLIC CODE + */ + +char* wgaim_install_dir(void) { + HMODULE hmod; + char* buf; + + hmod = GetModuleHandle(NULL); + if( hmod == 0 ) { + buf = g_win32_error_message( GetLastError() ); + debug_printf("GetModuleHandle error: %s\n", buf); + free(buf); + return NULL; + } + if(GetModuleFileName( hmod, (char*)&install_dir, MAXPATHLEN ) == 0) { + buf = g_win32_error_message( GetLastError() ); + debug_printf("GetModuleFileName error: %s\n", buf); + free(buf); + return NULL; + } + buf = g_path_get_dirname( install_dir ); + strcpy( (char*)&install_dir, buf ); + free( buf ); + + return (char*)&install_dir; +} + +char* wgaim_lib_dir(void) { + strcpy(lib_dir, wgaim_install_dir()); + strcat(lib_dir, G_DIR_SEPARATOR_S "plugins"); + return (char*)&lib_dir; +} + +char* wgaim_locale_dir(void) { + strcpy(locale_dir, wgaim_install_dir()); + strcat(locale_dir, G_DIR_SEPARATOR_S "locale"); + return (char*)&locale_dir; +} + +GdkFilterReturn wgaim_window_filter( GdkXEvent *xevent, GdkEvent *event, gpointer data) +{ + MSG *msg = (MSG*)xevent; + + switch( msg->message ) { + case WM_SYSCOMMAND: + if( msg->wParam == SC_MINIMIZE ) { + MinimizeWndToTray(msg->hwnd); + ShowNotifyIcon(msg->hwnd,TRUE); + + SetWindowLong(msg->hwnd,DWL_MSGRESULT,0); + return GDK_FILTER_REMOVE; + } + break; + case WM_CLOSE: + MinimizeWndToTray(msg->hwnd); + ShowNotifyIcon(msg->hwnd,TRUE); + return GDK_FILTER_REMOVE; + } + + return GDK_FILTER_CONTINUE; +} + +void wgaim_init(void) { + /* Filter to catch systray events */ + gdk_add_client_message_filter (GDK_POINTER_TO_ATOM (WM_TRAYMESSAGE), + traymsg_filter_func, + NULL); +}