4 Commits

2 changed files with 92 additions and 0 deletions

View File

@@ -461,6 +461,8 @@ static void mg_create_entry (session *sess, GtkWidget *box);
static void mg_create_search (session *sess, GtkWidget *box);
#ifdef G_OS_WIN32
static GdkFilterReturn mg_win32_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data);
static void mg_show_win32_emoji_panel (GtkEntry *entry);
static void mg_inputbox_icon_press (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data);
#endif
static void mg_link_irctab (session *sess, int focus);
@@ -4027,7 +4029,13 @@ mg_create_entry (session *sess, GtkWidget *box)
if (prefs.hex_gui_input_style)
mg_apply_entry_style (entry);
#ifdef G_OS_WIN32
g_object_set (G_OBJECT (entry), "show-emoji-icon", FALSE, NULL);
gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, NULL);
g_signal_connect (G_OBJECT (entry), "icon-press", G_CALLBACK (mg_inputbox_icon_press), NULL);
#else
g_object_set (G_OBJECT (entry), "show-emoji-icon", TRUE, NULL);
#endif
if (gtk_entry_get_icon_storage_type (GTK_ENTRY (entry), GTK_ENTRY_ICON_SECONDARY) == GTK_IMAGE_EMPTY)
{
@@ -4037,6 +4045,59 @@ mg_create_entry (session *sess, GtkWidget *box)
}
}
#ifdef G_OS_WIN32
static void
mg_show_win32_emoji_panel (GtkEntry *entry)
{
INPUT input[4];
GdkRectangle icon_rect;
GtkWidget *widget;
GdkWindow *window;
gint origin_x, origin_y;
widget = GTK_WIDGET (entry);
if (gtk_widget_get_realized (widget))
{
window = gtk_widget_get_window (widget);
if (window)
{
gtk_entry_get_icon_area (entry, GTK_ENTRY_ICON_SECONDARY, &icon_rect);
gdk_window_get_origin (window, &origin_x, &origin_y);
SetCursorPos (origin_x + icon_rect.x + (icon_rect.width / 2),
origin_y + icon_rect.y + (icon_rect.height / 2));
}
}
ZeroMemory (input, sizeof (input));
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = VK_LWIN;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = VK_OEM_PERIOD;
input[2].type = INPUT_KEYBOARD;
input[2].ki.wVk = VK_OEM_PERIOD;
input[2].ki.dwFlags = KEYEVENTF_KEYUP;
input[3].type = INPUT_KEYBOARD;
input[3].ki.wVk = VK_LWIN;
input[3].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput ((UINT) G_N_ELEMENTS (input), input, sizeof (INPUT));
}
static void
mg_inputbox_icon_press (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data)
{
(void) event;
(void) user_data;
if (icon_pos != GTK_ENTRY_ICON_SECONDARY)
return;
g_signal_stop_emission_by_name (entry, "icon-press");
mg_show_win32_emoji_panel (entry);
}
#endif
static void
mg_switch_tab_cb (chanview *cv, chan *ch, int tag, gpointer ud)
{

View File

@@ -46,6 +46,8 @@
#ifdef WIN32
#include "../common/fe.h"
#include <windows.h>
#include <commdlg.h>
#endif
#include "sexy-spell-entry.h"
@@ -1236,6 +1238,34 @@ setup_browsefolder_cb (GtkWidget *button, GtkEntry *entry)
static void
setup_browsefont_cb (GtkWidget *button, GtkWidget *entry)
{
#ifdef WIN32
CHOOSEFONTW choose_font;
LOGFONTW log_font;
gunichar2 utf16_name[LF_FACESIZE];
gchar *font_name;
gchar font_spec[FONTNAMELEN + 1];
gint point_size;
memset (&choose_font, 0, sizeof (choose_font));
memset (&log_font, 0, sizeof (log_font));
choose_font.lStructSize = sizeof (choose_font);
choose_font.Flags = CF_SCREENFONTS | CF_FORCEFONTEXIST | CF_INITTOLOGFONTSTRUCT;
choose_font.lpLogFont = &log_font;
if (ChooseFontW (&choose_font))
{
memcpy (utf16_name, log_font.lfFaceName, sizeof (utf16_name));
font_name = g_utf16_to_utf8 (utf16_name, -1, NULL, NULL, NULL);
if (font_name && font_name[0])
{
point_size = choose_font.iPointSize > 0 ? choose_font.iPointSize / 10 : 11;
g_snprintf (font_spec, sizeof (font_spec), "%s %d", font_name, point_size);
gtk_entry_set_text (GTK_ENTRY (entry), font_spec);
}
g_free (font_name);
}
#else
GtkWidget *dialog;
const char *font_name;
@@ -1253,6 +1283,7 @@ setup_browsefont_cb (GtkWidget *button, GtkWidget *entry)
G_CALLBACK (setup_fontchooser_response), entry);
gtk_widget_show (dialog);
#endif
}
static void