Revision: 622 Author: eht16 Date: 2006-07-24 16:56:50 -0700 (Mon, 24 Jul 2006) ViewCVS: http://svn.sourceforge.net/geany/?rev=622&view=rev
Log Message: ----------- -Convert Unicode strings to wide characters to avoid weird display.
Modified Paths: -------------- trunk/ChangeLog trunk/src/win32.c trunk/src/win32.h Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-07-24 21:18:06 UTC (rev 621) +++ trunk/ChangeLog 2006-07-24 23:56:50 UTC (rev 622) @@ -5,6 +5,8 @@ tagmanager/tm_workspace.c: Fixed some cross compiling/Win32 issues. * geany.glade, src/callbacks.c, src/document.c, src/interface.c, src/main.c: Added menu item to the document menu to add/remove BOM. + * src/win32.c, src/dialogs.c: + Convert Unicode strings to wide characters to avoid weird display.
2006-07-24 Nick Treleaven nick.treleaven@btinternet.com
Modified: trunk/src/win32.c =================================================================== --- trunk/src/win32.c 2006-07-24 21:18:06 UTC (rev 621) +++ trunk/src/win32.c 2006-07-24 23:56:50 UTC (rev 622) @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * $Id$ */ @@ -41,97 +41,10 @@ #include "dialogs.h"
-//static gchar appfontname[128] = "tahoma 8"; /* fallback value */ static gchar *filters; static gchar *exe_filters;
-/* -void set_app_font (const char *fontname) -{ - GtkSettings *settings;
- if (fontname != NULL && *fontname == 0) return; - - settings = gtk_settings_get_default(); - - if (fontname == NULL) - { - g_object_set(G_OBJECT(settings), "gtk-font-name", appfontname, NULL); - } - else - { - GtkWidget *w; - PangoFontDescription *pfd; - PangoContext *pc; - PangoFont *pfont; - - w = gtk_label_new(NULL); - pfd = pango_font_description_from_string(fontname); - pc = gtk_widget_get_pango_context(w); - pfont = pango_context_load_font(pc, pfd); - - if (pfont != NULL) - { - strcpy(appfontname, fontname); - g_object_set(G_OBJECT(settings), "gtk-font-name", appfontname, NULL); - } - - gtk_widget_destroy(w); - pango_font_description_free(pfd); - } -} - -char *default_windows_menu_fontspec (void) -{ - gchar *fontspec = NULL; - NONCLIENTMETRICS ncm; - - memset(&ncm, 0, sizeof ncm); - ncm.cbSize = sizeof ncm; - - if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0)) - { - HDC screen = GetDC(0); - double y_scale = 72.0 / GetDeviceCaps(screen, LOGPIXELSY); - int point_size = (int) (ncm.lfMenuFont.lfHeight * y_scale); - - if (point_size < 0) point_size = -point_size; - fontspec = g_strdup_printf("%s %d", ncm.lfMenuFont.lfFaceName, point_size); - ReleaseDC(0, screen); - } - - return fontspec; -} - -void try_to_get_windows_font (void) -{ - gchar *fontspec = default_windows_menu_fontspec(); - - if (fontspec != NULL) - { - int match = 0; - PangoFontDescription *pfd; - PangoFont *pfont; - PangoContext *pc; - GtkWidget *w; - - pfd = pango_font_description_from_string(fontspec); - - w = gtk_label_new(NULL); - pc = gtk_widget_get_pango_context(w); - pfont = pango_context_load_font(pc, pfd); - match = (pfont != NULL); - - pango_font_description_free(pfd); - g_object_unref(G_OBJECT(pc)); - gtk_widget_destroy(w); - - if (match) set_app_font(fontspec); - g_free(fontspec); - } -} -*/ - static gchar *win32_get_filters(gboolean exe) { gchar *string = ""; @@ -213,8 +126,8 @@ if (CommDlgExtendedError()) { gchar error[100]; - snprintf(error, 255, "File dialog box error (%x)", (int)CommDlgExtendedError()); - MessageBox(NULL, error, _("Error"), MB_OK | MB_ICONERROR); + snprintf(error, sizeof error, "File dialog box error (%x)", (int)CommDlgExtendedError()); + win32_message_dialog(GTK_MESSAGE_ERROR, _("Error"), error); } g_free(fname); return; @@ -375,8 +288,8 @@ if (CommDlgExtendedError()) { gchar error[100]; - snprintf(error, 255, "File dialog box error (%x)", (int)CommDlgExtendedError()); - MessageBox(NULL, error, _("Error"), MB_OK | MB_ICONERROR); + snprintf(error, sizeof error, "File dialog box error (%x)", (int)CommDlgExtendedError()); + win32_message_dialog(GTK_MESSAGE_ERROR, _("Error"), error); } g_strfreev(field); g_free(fname); @@ -402,4 +315,61 @@ g_free(fname); }
+ +/* Creates a native Windows message box of the given type and returns always TRUE + * or FALSE representing th pressed Yes or No button. + * If type is not GTK_MESSAGE_QUESTION, it returns always TRUE. */ +gboolean win32_message_dialog(GtkMessageType type, const gchar *title, const gchar *msg) +{ + gboolean ret = TRUE; + gint rc; + guint t; + static wchar_t w_msg[512]; + static wchar_t w_title[512]; + + switch (type) + { + case GTK_MESSAGE_ERROR: t = MB_OK | MB_ICONERROR; break; + case GTK_MESSAGE_QUESTION: t = MB_YESNO | MB_ICONQUESTION; break; + default: t = MB_OK | MB_ICONINFORMATION; break; + } + + // convert the Unicode chars to wide chars + /// TODO test if LANG == C then possibly skip conversion + MultiByteToWideChar(CP_UTF8, 0, msg, -1, w_msg, sizeof(w_msg)/sizeof(w_msg[0])); + MultiByteToWideChar(CP_UTF8, 0, title, -1, w_title, sizeof(w_title)/sizeof(w_title[0])); + + // display the message box + rc = MessageBoxW(NULL, w_msg, w_title, t); + + if (type == GTK_MESSAGE_QUESTION && rc != IDYES) + ret = FALSE; + + return ret; +} + + +/* Special dialog to ask for an action when closing an unsaved file */ +gint win32_message_dialog_unsaved(const gchar *title, const gchar *msg) +{ + static wchar_t w_msg[512]; + static wchar_t w_title[512]; + gint ret; + + // convert the Unicode chars to wide chars + /// TODO test if LANG == C then possibly skip conversion + MultiByteToWideChar(CP_UTF8, 0, msg, -1, w_msg, sizeof(w_msg)/sizeof(w_msg[0])); + MultiByteToWideChar(CP_UTF8, 0, title, -1, w_title, sizeof(w_title)/sizeof(w_title[0])); + + ret = MessageBoxW(NULL, w_msg, w_title, MB_YESNOCANCEL | MB_ICONQUESTION); + switch(ret) + { + case IDYES: ret = GTK_RESPONSE_YES; break; + case IDNO: ret = GTK_RESPONSE_NO; break; + case IDCANCEL: ret = GTK_RESPONSE_CANCEL; break; + } + + return ret; +} + #endif
Modified: trunk/src/win32.h =================================================================== --- trunk/src/win32.h 2006-07-24 21:18:06 UTC (rev 621) +++ trunk/src/win32.h 2006-07-24 23:56:50 UTC (rev 622) @@ -1,7 +1,7 @@ /* * win32.h - this file is part of Geany, a fast and lightweight IDE * - * Copyright 2005 Enrico Troeger enrico.troeger@uvena.de + * Copyright 2006 Enrico Troeger enrico.troeger@uvena.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * $Id$ */ @@ -41,4 +41,12 @@
void win32_show_color_dialog(void);
+/* Creates a native Windows message box of the given type and returns always TRUE + * or FALSE representing th pressed Yes or No button. + * If type is not GTK_MESSAGE_QUESTION, it returns always TRUE. */ +gboolean win32_message_dialog(GtkMessageType type, const gchar *title, const gchar *msg); + +/* Special dialog to ask for an action when closing an unsaved file */ +gint win32_message_dialog_unsaved(const gchar *title, const gchar *msg); + #endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.