Skip to content

Commit

Permalink
Updated to align and draw counters manually.
Browse files Browse the repository at this point in the history
  • Loading branch information
AlynxZhou committed May 7, 2024
1 parent 6056654 commit f1a2a5a
Show file tree
Hide file tree
Showing 5 changed files with 241 additions and 175 deletions.
2 changes: 0 additions & 2 deletions showmethekey-gtk/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@ int main(int argc, char *argv[])
textdomain(GETTEXT_PACKAGE);

SmtkApp *app = smtk_app_new();

int result = g_application_run(G_APPLICATION(app), argc, argv);

g_object_unref(app);

return result;
Expand Down
127 changes: 68 additions & 59 deletions showmethekey-gtk/smtk-app-win.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,16 @@ static SmtkKeyMode smtk_app_win_get_mode(SmtkAppWin *win)
}
}

static void smtk_app_win_get_keymap(SmtkAppWin *win, const char **layout,
const char **variant)
{
GObject *keymap = adw_combo_row_get_selected_item(
ADW_COMBO_ROW(win->keymap_selector));
*layout = smtk_keymap_item_get_layout(SMTK_KEYMAP_ITEM(keymap));
*variant = smtk_keymap_item_get_variant(SMTK_KEYMAP_ITEM(keymap));
g_debug("Keymap: %s (%s).", *layout, *variant);
}

static void smtk_app_win_enable(SmtkAppWin *win)
{
gtk_widget_set_sensitive(win->clickable_switch, false);
Expand Down Expand Up @@ -79,6 +89,52 @@ static void smtk_app_win_keys_win_on_destroy(SmtkAppWin *win,
}
}

static void smtk_app_win_active(SmtkAppWin *win)
{
const bool show_shift =
gtk_switch_get_active(GTK_SWITCH(win->shift_switch));
const bool show_mouse =
gtk_switch_get_active(GTK_SWITCH(win->mouse_switch));
const bool draw_border =
gtk_switch_get_active(GTK_SWITCH(win->border_switch));

SmtkKeyMode mode = smtk_app_win_get_mode(win);

const int timeout = gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON(win->timeout_entry));
g_debug("Timeout: %d.", timeout);

int width = gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON(win->width_entry));
width = width <= 0 ? 1500 : width;
int height = gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON(win->height_entry));
height = height <= 0 ? 200 : height;
g_debug("Size: %d×%d.", width, height);

const char *layout = NULL;
const char *variant = NULL;
smtk_app_win_get_keymap(win, &layout, &variant);

GError *error = NULL;
win->keys_win = smtk_keys_win_new(show_shift, show_mouse, draw_border,
mode, width, height, timeout, layout,
variant, &error);
if (win->keys_win == NULL) {
g_warning("%s", error->message);
g_error_free(error);
gtk_switch_set_active(GTK_SWITCH(win->keys_win_switch), false);
return;
}
g_signal_connect_object(win->keys_win, "destroy",
G_CALLBACK(smtk_app_win_keys_win_on_destroy),
win, G_CONNECT_SWAPPED);

smtk_app_win_disable(win);

gtk_window_present(GTK_WINDOW(win->keys_win));
}

// See <https://mail.gnome.org/archives/networkmanager-list/2010-October/msg00129.html>.
// notify of property have one more argument for property
// in the middle of instance and object.
Expand All @@ -87,53 +143,10 @@ static void smtk_app_win_on_keys_win_switch_active(SmtkAppWin *win,
GtkSwitch *keys_win_switch)
{
if (gtk_switch_get_active(GTK_SWITCH(win->keys_win_switch))) {
if (win->keys_win == NULL) {
const bool show_shift = gtk_switch_get_active(
GTK_SWITCH(win->shift_switch));
const bool show_mouse = gtk_switch_get_active(
GTK_SWITCH(win->mouse_switch));
const bool draw_border = gtk_switch_get_active(
GTK_SWITCH(win->border_switch));
SmtkKeyMode mode = smtk_app_win_get_mode(win);
int timeout = gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON(win->timeout_entry));
g_debug("Timeout: %d.", timeout);
int width = gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON(win->width_entry));
width = width <= 0 ? 1500 : width;
int height = gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON(win->height_entry));
height = height <= 0 ? 200 : height;
g_debug("Size: %dx%d.", width, height);
GObject *keymap = adw_combo_row_get_selected_item(
ADW_COMBO_ROW(win->keymap_selector));
const char *layout = smtk_keymap_item_get_layout(
SMTK_KEYMAP_ITEM(keymap));
const char *variant = smtk_keymap_item_get_variant(
SMTK_KEYMAP_ITEM(keymap));
g_debug("Keymap: %s (%s).", layout, variant);
GError *error = NULL;
win->keys_win = smtk_keys_win_new(
show_shift, show_mouse, draw_border, mode,
width, height, timeout, layout, variant,
&error);
if (win->keys_win == NULL) {
g_warning("%s", error->message);
g_error_free(error);
gtk_switch_set_active(
GTK_SWITCH(win->keys_win_switch),
false);
return;
}
smtk_app_win_disable(win);
g_signal_connect_object(
win->keys_win, "destroy",
G_CALLBACK(smtk_app_win_keys_win_on_destroy),
win, G_CONNECT_SWAPPED);
gtk_window_present(GTK_WINDOW(win->keys_win));
}
if (win->keys_win == NULL)
smtk_app_win_active(win);
} else {
// We clear pointer and change widget states in signal callback.
// We clear pointer and change widget states in signal handler.
if (win->keys_win != NULL)
gtk_window_destroy(GTK_WINDOW(win->keys_win));
}
Expand Down Expand Up @@ -243,20 +256,16 @@ smtk_app_win_on_keymap_selector_selected(SmtkAppWin *win, GParamSpec *prop,
if (win->keys_win == NULL)
return;

GObject *keymap = adw_combo_row_get_selected_item(
ADW_COMBO_ROW(win->keymap_selector));
const char *layout =
smtk_keymap_item_get_layout(SMTK_KEYMAP_ITEM(keymap));
const char *variant =
smtk_keymap_item_get_variant(SMTK_KEYMAP_ITEM(keymap));
g_debug("Keymap: %s (%s).", layout, variant);
const char *layout = NULL;
const char *variant = NULL;
smtk_app_win_get_keymap(win, &layout, &variant);

smtk_keys_win_set_layout(SMTK_KEYS_WIN(win->keys_win), layout);
smtk_keys_win_set_variant(SMTK_KEYS_WIN(win->keys_win), variant);
}

static int _settings_to_object(GValue *value, GVariant *variant,
gpointer user_data)
static int settings_to_object(GValue *value, GVariant *variant,
gpointer user_data)
{
SmtkAppWin *win = user_data;
char *name = NULL;
Expand All @@ -277,9 +286,9 @@ static int _settings_to_object(GValue *value, GVariant *variant,
return 1;
}

static GVariant *_object_to_settings(const GValue *value,
const GVariantType *expected_type,
gpointer user_data)
static GVariant *object_to_settings(const GValue *value,
const GVariantType *expected_type,
gpointer user_data)
{
SmtkAppWin *win = user_data;
unsigned int position = g_value_get_uint(value);
Expand Down Expand Up @@ -365,7 +374,7 @@ static void smtk_app_win_init(SmtkAppWin *win)
g_settings_bind_with_mapping(win->settings, "keymap",
win->keymap_selector, "selected",
G_SETTINGS_BIND_DEFAULT,
_settings_to_object, _object_to_settings,
settings_to_object, object_to_settings,
win, NULL);

if (g_settings_get_boolean(win->settings, "first-time")) {
Expand Down
Loading

0 comments on commit f1a2a5a

Please sign in to comment.