1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
From 17394a6f684b46e9f4bc2ed039515b09971b39d9 Mon Sep 17 00:00:00 2001
From: Robert Tari <robert@tari.in>
Date: Wed, 14 May 2025 16:22:42 +0200
Subject: [PATCH 1/2] Fix showing current layout on Lomiri
Just like GNOME did, we are switching to tecla here, since gkbd-keyboard-display does not work under Wayland.
fixes https://github.com/AyatanaIndicators/ayatana-indicator-keyboard/issues/76
---
src/keyboard-lomiri.c | 9 +++++++--
src/keyboard-x11.c | 13 ++++++++++---
src/keyboard.h | 4 ++--
src/service.c | 20 +++++++++++++++-----
4 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/src/keyboard-lomiri.c b/src/keyboard-lomiri.c
index c00bc55a1..bc6b3f93a 100644
--- a/src/keyboard-lomiri.c
+++ b/src/keyboard-lomiri.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2021-2024 Robert Tari <robert@tari.in>
+ * Copyright 2021-2025 Robert Tari <robert@tari.in>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
@@ -179,7 +179,7 @@ guint keyboard_GetLayoutIndex (Keyboard *pKeyboard)
return pKeyboard->pPrivate->nLayout;
}
-void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription)
+void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription, gchar **pId)
{
if (nLayout == -1)
{
@@ -199,6 +199,11 @@ void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gc
{
*pDescription = g_strdup(pLayout->sDescription);
}
+
+ if (pId != NULL)
+ {
+ *pId = g_strdup (sLayout);
+ }
}
void keyboard_SetLayout(Keyboard *pKeyboard, gint nLayout)
diff --git a/src/keyboard-x11.c b/src/keyboard-x11.c
index d7d482f5c..27dfb97cd 100644
--- a/src/keyboard-x11.c
+++ b/src/keyboard-x11.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2021-2024 Robert Tari <robert@tari.in>
+ * Copyright 2021-2025 Robert Tari <robert@tari.in>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
@@ -390,7 +390,7 @@ guint keyboard_GetLayoutIndex (Keyboard *pKeyboard)
return pKeyboard->pPrivate->nLayout;
}
-void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription)
+void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription, gchar **pId)
{
if (nLayout == -1)
{
@@ -432,7 +432,14 @@ void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gc
*pDescription = g_strdup(pLayout->sDescription);
}
- g_free(sId);
+ if (pId != NULL)
+ {
+ *pId = sId;
+ }
+ else
+ {
+ g_free(sId);
+ }
}
void keyboard_SetLayout(Keyboard *pKeyboard, gint nLayout)
diff --git a/src/keyboard.h b/src/keyboard.h
index 39f822cdf..49c210561 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2021-2023 Robert Tari <robert@tari.in>
+ * Copyright 2021-2025 Robert Tari <robert@tari.in>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
@@ -48,7 +48,7 @@ Keyboard* keyboard_new();
void keyboard_AddSource(Keyboard *pKeyboard);
guint keyboard_GetNumLayouts(Keyboard *pKeyboard);
guint keyboard_GetLayoutIndex (Keyboard *pKeyboard);
-void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription);
+void keyboard_GetLayout(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription, gchar **pId);
void keyboard_SetLayout(Keyboard *pKeyboard, gint nLayout);
G_END_DECLS
diff --git a/src/service.c b/src/service.c
index 31f6ca3b1..f4b086cc0 100644
--- a/src/service.c
+++ b/src/service.c
@@ -31,7 +31,7 @@ static Keyboard* (*m_fnKeyboardNew)();
static void (*m_fnKeyboardAddSource)(Keyboard *pKeyboard);
static guint (*m_fnKeyboardGetNumLayouts)(Keyboard *pKeyboard);
static guint (*m_fnKeyboardGetLayoutIndex)(Keyboard *pKeyboard);
-static void (*m_fnKeyboardGetLayout)(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription);
+static void (*m_fnKeyboardGetLayout)(Keyboard *pKeyboard, gint nLayout, gchar **pLanguage, gchar **pDescription, gchar **pId);
static void (*m_fnKeyboardSetLayout)(Keyboard *pKeyboard, gint nLayout);
enum
@@ -121,7 +121,7 @@ static GVariant* createHeaderState(IndicatorKeyboardService *self, int nProfile)
else
{
gchar *sLanguage;
- m_fnKeyboardGetLayout(self->pPrivate->pKeyboard, -1, &sLanguage, NULL);
+ m_fnKeyboardGetLayout(self->pPrivate->pKeyboard, -1, &sLanguage, NULL, NULL);
gchar *sIcon = g_strconcat("ayatana-indicator-keyboard-", sLanguage, NULL);
g_free(sLanguage);
@@ -158,7 +158,7 @@ static GMenuModel* createLayoutSection(IndicatorKeyboardService *self)
{
gchar *sLanguage;
gchar *sDescription;
- m_fnKeyboardGetLayout(self->pPrivate->pKeyboard, nLayout, &sLanguage, &sDescription);
+ m_fnKeyboardGetLayout(self->pPrivate->pKeyboard, nLayout, &sLanguage, &sDescription, NULL);
GMenuItem *pItem = g_menu_item_new(sDescription, NULL);
g_free(sDescription);
g_menu_item_set_action_and_target_value(pItem, "indicator.layout", g_variant_new_byte(nLayout));
@@ -345,17 +345,27 @@ static void onDisplay (GSimpleAction *pAction, GVariant *pVariant, gpointer pDat
IndicatorKeyboardService *self = INDICATOR_KEYBOARD_SERVICE (pData);
guint nLayout = m_fnKeyboardGetLayoutIndex (self->pPrivate->pKeyboard);
gchar *sProgram = NULL;
+ gchar *sArgs = NULL;
+ gboolean bMate = ayatana_common_utils_is_mate ();
+ gboolean bLomiri = ayatana_common_utils_is_lomiri ();
- if (ayatana_common_utils_is_mate ())
+ if (bMate)
{
sProgram = "matekbd-keyboard-display";
+ sArgs = g_strdup_printf ("-g %i", nLayout + 1);
+ }
+ else if (bLomiri)
+ {
+
+ sProgram = "tecla";
+ m_fnKeyboardGetLayout (self->pPrivate->pKeyboard, -1, NULL, NULL, &sArgs);
}
else
{
sProgram = "gkbd-keyboard-display";
+ sArgs = g_strdup_printf ("-g %i", nLayout + 1);
}
- gchar *sArgs = g_strdup_printf ("-g %i", nLayout + 1);
ayatana_common_utils_execute_command_warn (sProgram, sArgs);
g_free (sArgs);
}
|