pidgin: 81bf09b8: Use the Post W2K Windows System Tray ico...
datallah at pidgin.im
datallah at pidgin.im
Fri Mar 5 00:50:48 EST 2010
-----------------------------------------------------------------
Revision: 81bf09b82728c27c0e2988d78b62013cb9a06f3b
Ancestor: f34196b8fe5cf44d45a6d46acc33af178b303d44
Author: datallah at pidgin.im
Date: 2010-03-05T05:44:25
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/81bf09b82728c27c0e2988d78b62013cb9a06f3b
Modified files:
pidgin/win32/gtkdocklet-win32.c
ChangeLog:
Use the Post W2K Windows System Tray icon stuff - allows for 128 chars instead of 64 - also support non-ASCII stuff in the tooltip. Fixes #11461
-------------- next part --------------
============================================================
--- pidgin/win32/gtkdocklet-win32.c cde08f62c5f0214f5cf42198c9419df8ade23c8b
+++ pidgin/win32/gtkdocklet-win32.c 213e4be77706db1d5d0897c7033f1ed1f8585122
@@ -21,7 +21,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02111-1301, USA.
*/
-
+#define _WIN32_IE 0x0500
#include <windows.h>
#include <gdk/gdkwin32.h>
#include <gdk/gdk.h>
@@ -51,7 +51,7 @@ static GtkWidget *dummy_window = NULL;
/* This is used to trigger click events on so they appear to GTK+ as if they are triggered by input */
static GtkWidget *dummy_button = NULL;
static GtkWidget *dummy_window = NULL;
-static NOTIFYICONDATA _nicon_data;
+static NOTIFYICONDATAW _nicon_data;
static gboolean dummy_button_cb(GtkWidget *widget, GdkEventButton *event, gpointer user_data) {
pidgin_docklet_clicked(event->button);
@@ -64,7 +64,7 @@ static LRESULT CALLBACK systray_mainmsg_
switch(msg) {
case WM_CREATE:
purple_debug_info("docklet", "WM_CREATE\n");
- taskbarRestartMsg = RegisterWindowMessage("TaskbarCreated");
+ taskbarRestartMsg = RegisterWindowMessageW(L"TaskbarCreated");
break;
case WM_TIMER:
@@ -114,7 +114,7 @@ static LRESULT CALLBACK systray_mainmsg_
if (msg == taskbarRestartMsg) {
/* explorer crashed and left us hanging...
This will put the systray icon back in it's place, when it restarts */
- Shell_NotifyIcon(NIM_ADD, &_nicon_data);
+ Shell_NotifyIconW(NIM_ADD, &_nicon_data);
}
break;
}/* end switch */
@@ -124,10 +124,10 @@ static HWND systray_create_hiddenwin() {
/* Create hidden window to process systray messages */
static HWND systray_create_hiddenwin() {
- WNDCLASSEX wcex;
- LPCTSTR wname;
+ WNDCLASSEXW wcex;
+ wchar_t *wname;
- wname = TEXT("WinpidginSystrayWinCls");
+ wname = L"WinpidginSystrayWinCls";
wcex.cbSize = sizeof(wcex);
wcex.style = 0;
@@ -142,22 +142,25 @@ static HWND systray_create_hiddenwin() {
wcex.lpszClassName = wname;
wcex.hIconSm = NULL;
- RegisterClassEx(&wcex);
+ RegisterClassExW(&wcex);
/* Create the window */
- return (CreateWindow(wname, "", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, winpidgin_exe_hinstance(), 0));
+ return (CreateWindowW(wname, L"", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, winpidgin_exe_hinstance(), 0));
}
static void systray_init_icon(HWND hWnd) {
+ wchar_t *w;
ZeroMemory(&_nicon_data, sizeof(_nicon_data));
- _nicon_data.cbSize = sizeof(NOTIFYICONDATA);
+ _nicon_data.cbSize = sizeof(NOTIFYICONDATAW);
_nicon_data.hWnd = hWnd;
_nicon_data.uID = 0;
_nicon_data.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
_nicon_data.uCallbackMessage = WM_TRAYMESSAGE;
_nicon_data.hIcon = NULL;
- lstrcpy(_nicon_data.szTip, PIDGIN_NAME);
- Shell_NotifyIcon(NIM_ADD, &_nicon_data);
+ w = g_utf8_to_utf16(PIDGIN_NAME, -1, NULL, NULL, NULL);
+ wcsncpy(_nicon_data.szTip, w, sizeof(_nicon_data.szTip) / sizeof(wchar_t));
+ g_free(w);
+ Shell_NotifyIconW(NIM_ADD, &_nicon_data);
pidgin_docklet_embedded();
}
@@ -486,11 +489,11 @@ static void systray_change_icon(HICON hi
g_return_if_fail(hicon != NULL);
_nicon_data.hIcon = hicon;
- Shell_NotifyIcon(NIM_MODIFY, &_nicon_data);
+ Shell_NotifyIconW(NIM_MODIFY, &_nicon_data);
}
static void systray_remove_nid(void) {
- Shell_NotifyIcon(NIM_DELETE, &_nicon_data);
+ Shell_NotifyIconW(NIM_DELETE, &_nicon_data);
}
static void winpidgin_tray_update_icon(PurpleStatusPrimitive status,
@@ -547,19 +550,19 @@ static void winpidgin_tray_blank_icon()
static void winpidgin_tray_blank_icon() {
_nicon_data.hIcon = NULL;
- Shell_NotifyIcon(NIM_MODIFY, &_nicon_data);
+ Shell_NotifyIconW(NIM_MODIFY, &_nicon_data);
}
static void winpidgin_tray_set_tooltip(gchar *tooltip) {
- if (tooltip) {
- char *locenc = NULL;
- locenc = g_locale_from_utf8(tooltip, -1, NULL, NULL, NULL);
- lstrcpyn(_nicon_data.szTip, locenc, sizeof(_nicon_data.szTip) / sizeof(TCHAR));
- g_free(locenc);
- } else {
- lstrcpy(_nicon_data.szTip, PIDGIN_NAME);
- }
- Shell_NotifyIcon(NIM_MODIFY, &_nicon_data);
+ const char *value = tooltip;
+ wchar_t *w;
+ if (value == NULL) {
+ value = PIDGIN_NAME;
+ }
+ w = g_utf8_to_utf16(value, -1, NULL, NULL, NULL);
+ wcsncpy(_nicon_data.szTip, w, sizeof(_nicon_data.szTip) / sizeof(wchar_t));
+ g_free(w);
+ Shell_NotifyIconW(NIM_MODIFY, &_nicon_data);
}
static void winpidgin_tray_minimize(PidginBuddyList *gtkblist) {
More information about the Commits
mailing list