lxde / lxterminal

VTE terminal emulator written in GTK
GNU General Public License v2.0
159 stars 55 forks source link

add fullscreen function #104

Closed xinligg closed 2 years ago

xinligg commented 2 years ago

When not in lxde environment, lxterminal does not support the fullscreen function, because lxde supports this function through the shortcut key of openbox. I added the fullscreen function to lxterminal when it is not used in lxde environment.


From ce298a7326c1aa9759f13fda2bd6566ccfede7b9 Mon Sep 17 00:00:00 2001
From: xinli <xinligg@gmail.com>
Date: Tue, 28 Sep 2021 09:17:33 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E5=8A=A0=E5=85=A5fullscreen=E5=8A=9F?=
 =?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 data/menu.ui     |  3 +++
 src/lxterminal.c | 30 ++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/data/menu.ui b/data/menu.ui
index e2568a9..3a97585 100644
--- a/data/menu.ui
+++ b/data/menu.ui
@@ -18,6 +18,9 @@
       <separator/>
       <menuitem name="Edit_Preferences" action="Edit_Preferences"/>
     </menu>
+    <menu name="View" action="View">
+      <menuitem name="View_Fullscreen" action="View_Fullscreen"/>
+    </menu>
     <menu name="Tabs" action="Tabs">
       <menuitem name="Tabs_NameTab" action="Tabs_NameTab"/>
       <menuitem name="Tabs_PreviousTab" action="Tabs_PreviousTab"/>
diff --git a/src/lxterminal.c b/src/lxterminal.c
index f5db42b..dd274e9 100644
--- a/src/lxterminal.c
+++ b/src/lxterminal.c
@@ -75,6 +75,7 @@ static void terminal_zoom(LXTerminal * terminal);
 static gboolean terminal_zoom_in_activate_event(GtkAction * action, LXTerminal * terminal);
 static gboolean terminal_zoom_out_activate_event(GtkAction * action, LXTerminal * terminal);
 static gboolean terminal_zoom_reset_activate_event(GtkAction * action, LXTerminal * terminal);
+static void terminal_window_action_fullscreen(GtkToggleAction* action, LXTerminal * terminal);
 static void terminal_about_activate_event(GtkAction * action, LXTerminal * terminal);

 /* Window creation, destruction, and control. */
@@ -128,6 +129,7 @@ static GtkActionEntry menu_items[] =
 {
 /* 0 */    { "File", NULL, N_("_File"), NULL, NULL, NULL },
 /* 1 */    { "Edit", NULL, N_("_Edit"), NULL, NULL, NULL },
+/*   */    { "View", NULL, N_("_View"), NULL, NULL, NULL },
 /* 2 */    { "Tabs", NULL, N_("_Tabs"), NULL, NULL, NULL },
 /* 3 */    { "Help", NULL, N_("_Help"), NULL, NULL, NULL },
 /* 4 */    { "File_NewWindow", "list-add", N_("_New Window"), NEW_WINDOW_ACCEL_DEF, "New Window", G_CALLBACK(terminal_new_window_activate_event) },
@@ -152,6 +154,11 @@ static GtkActionEntry menu_items[] =
 /* 23 */    { "Help_About", "help-about", N_("_About"), NULL, "About", G_CALLBACK(terminal_about_activate_event) },
 };
 #define MENUBAR_MENUITEM_COUNT G_N_ELEMENTS(menu_items)
+static const GtkToggleActionEntry toggle_action_entries[] =
+{
+/* 0 */    { "View_Fullscreen", "Fullscreen", N_("_Fullscreen"), NULL, "Fullscreen", G_CALLBACK(terminal_window_action_fullscreen), FALSE, },
+};
+

 /* Descriptors for popup menu items, accessed via right click on the terminal. */
 static GtkActionEntry vte_menu_items[] =
@@ -761,6 +768,25 @@ static gboolean terminal_zoom_reset_activate_event(GtkAction * action, LXTermina
     return FALSE;
 }

+static void
+terminal_window_action_fullscreen(GtkToggleAction* action, LXTerminal * terminal)
+{
+  gboolean fullscreen;
+
+  if (gtk_widget_get_visible (GTK_WIDGET (terminal->window)))
+    {
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+      fullscreen = gtk_toggle_action_get_active (action);
+G_GNUC_END_IGNORE_DEPRECATIONS
+      if (fullscreen)
+        gtk_window_fullscreen (GTK_WINDOW (terminal->window));
+      else
+        {
+          gtk_window_unfullscreen (GTK_WINDOW (terminal->window));
+        }
+    }
+}
+
 /* Handler for "activate" signal on Help/About menu item. */
 static void terminal_about_activate_event(GtkAction * action, LXTerminal * terminal)
 {
@@ -978,6 +1004,7 @@ static void terminal_show_popup_menu(VteTerminal * vte, GdkEventButton * event,
     GtkActionGroup * action_group = gtk_action_group_new("VTEMenu");
     gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE);
     gtk_action_group_add_actions(action_group, vte_menu_items, VTE_MENUITEM_COUNT, term->parent);
+
     gtk_ui_manager_insert_action_group(manager, action_group, 0);

     guint merge_id = gtk_ui_manager_new_merge_id(manager);
@@ -1399,6 +1426,7 @@ static void terminal_menubar_initialize(LXTerminal * terminal)
     /* modify accelerators by setting */
     terminal_initialize_menu_shortcuts(get_setting());
     gtk_action_group_add_actions(terminal->action_group, menu_items, MENUBAR_MENUITEM_COUNT, terminal);
+    gtk_action_group_add_toggle_actions (terminal->action_group, toggle_action_entries, G_N_ELEMENTS (toggle_action_entries), terminal);
     gtk_ui_manager_insert_action_group(manager, terminal->action_group, 0);

     gtk_ui_manager_add_ui_from_file (manager, PACKAGE_DATA_DIR "/lxterminal/menu.ui", NULL);
@@ -1884,6 +1912,8 @@ void terminal_update_menu_shortcuts(Setting * setting)
     gtk_accelerator_parse(setting->zoom_reset_accel, &key, &mods);
     gtk_accel_map_change_entry("<Actions>/MenuBar/Edit_ZoomReset", key, mods, FALSE);
     gtk_accelerator_parse(setting->name_tab_accel, &key, &mods);
+    gtk_accel_map_change_entry("<Actions>/MenuBar/View_Fullscreen", key, mods, FALSE);
+    gtk_accelerator_parse(setting->previous_tab_accel, &key, &mods);
     gtk_accel_map_change_entry("<Actions>/MenuBar/Tabs_NameTab", key, mods, FALSE);
     gtk_accelerator_parse(setting->previous_tab_accel, &key, &mods);
     gtk_accel_map_change_entry("<Actions>/MenuBar/Tabs_PreviousTab", key, mods, FALSE);
-- 

From 903b46b2096abca674a68baccc6ec31282c8204b Mon Sep 17 00:00:00 2001
From: xinli <xinligg@gmail.com>
Date: Wed, 29 Sep 2021 00:45:13 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E7=BB=99=E5=85=A8=E5=B1=8F=E5=8A=A0?=
 =?UTF-8?q?=E5=85=A5=E5=BF=AB=E6=8D=B7=E9=94=AEF11?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/lxterminal.c | 2 +-
 src/setting.c    | 8 ++++++++
 src/setting.h    | 3 +++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/lxterminal.c b/src/lxterminal.c
index dd274e9..bb549b0 100644
--- a/src/lxterminal.c
+++ b/src/lxterminal.c
@@ -156,7 +156,7 @@ static GtkActionEntry menu_items[] =
 #define MENUBAR_MENUITEM_COUNT G_N_ELEMENTS(menu_items)
 static const GtkToggleActionEntry toggle_action_entries[] =
 {
-/* 0 */    { "View_Fullscreen", "Fullscreen", N_("_Fullscreen"), NULL, "Fullscreen", G_CALLBACK(terminal_window_action_fullscreen), FALSE, },
+/* 0 */    { "View_Fullscreen", "Fullscreen", N_("_Fullscreen"), "F11", "Fullscreen", G_CALLBACK(terminal_window_action_fullscreen), FALSE, },
 };

diff --git a/src/setting.c b/src/setting.c
index 2763273..b52f2c4 100644
--- a/src/setting.c
+++ b/src/setting.c
@@ -235,6 +235,7 @@ void save_setting()
     g_key_file_set_string(setting->keyfile, SHORTCUT_GROUP, COPY_ACCEL, setting->copy_accel);
     g_key_file_set_string(setting->keyfile, SHORTCUT_GROUP, PASTE_ACCEL, setting->paste_accel);
     g_key_file_set_string(setting->keyfile, SHORTCUT_GROUP, NAME_TAB_ACCEL, setting->name_tab_accel);
+    g_key_file_set_string(setting->keyfile, SHORTCUT_GROUP, FULLSCREEN_ACCEL, setting->fullscreen_accel);
     g_key_file_set_string(setting->keyfile, SHORTCUT_GROUP, PREVIOUS_TAB_ACCEL, setting->previous_tab_accel);
     g_key_file_set_string(setting->keyfile, SHORTCUT_GROUP, NEXT_TAB_ACCEL, setting->next_tab_accel);
     g_key_file_set_string(setting->keyfile, SHORTCUT_GROUP, MOVE_TAB_LEFT_ACCEL, setting->move_tab_left_accel);
@@ -288,6 +289,7 @@ Setting * copy_setting(Setting * setting)
     new_setting->close_window_accel = g_strdup(setting->close_window_accel);
     new_setting->copy_accel = g_strdup(setting->copy_accel);
     new_setting->paste_accel = g_strdup(setting->paste_accel);
+    new_setting->fullscreen_accel = g_strdup(setting->fullscreen_accel);
     new_setting->name_tab_accel = g_strdup(setting->name_tab_accel);
     new_setting->previous_tab_accel = g_strdup(setting->previous_tab_accel);
     new_setting->next_tab_accel = g_strdup(setting->next_tab_accel);
@@ -314,6 +316,7 @@ void free_setting(Setting ** setting)
     g_free(_setting->close_window_accel);
     g_free(_setting->copy_accel);
     g_free(_setting->paste_accel);
+    g_free(_setting->fullscreen_accel);
     g_free(_setting->name_tab_accel);
     g_free(_setting->previous_tab_accel);
     g_free(_setting->next_tab_accel);
@@ -457,6 +460,7 @@ color_preset_does_not_exist:
         setting->close_window_accel = g_key_file_get_string(setting->keyfile, SHORTCUT_GROUP, CLOSE_WINDOW_ACCEL, NULL);
         setting->copy_accel = g_key_file_get_string(setting->keyfile, SHORTCUT_GROUP, COPY_ACCEL, NULL);
         setting->paste_accel = g_key_file_get_string(setting->keyfile, SHORTCUT_GROUP, PASTE_ACCEL, NULL);
+        setting->fullscreen_accel = g_key_file_get_string(setting->keyfile, SHORTCUT_GROUP, FULLSCREEN_ACCEL, NULL);
         setting->name_tab_accel = g_key_file_get_string(setting->keyfile, SHORTCUT_GROUP, NAME_TAB_ACCEL, NULL);
         setting->previous_tab_accel = g_key_file_get_string(setting->keyfile, SHORTCUT_GROUP, PREVIOUS_TAB_ACCEL, NULL);
         setting->next_tab_accel = g_key_file_get_string(setting->keyfile, SHORTCUT_GROUP, NEXT_TAB_ACCEL, NULL);
@@ -508,6 +512,10 @@ color_preset_does_not_exist:
     {
         setting->paste_accel = g_strdup(PASTE_ACCEL_DEF);
     }
+    if (setting->fullscreen_accel == NULL)
+    {
+        setting->fullscreen_accel = g_strdup(FULLSCREEN_ACCEL_DEF);
+    }
     if (setting->name_tab_accel == NULL)
     {
         setting->name_tab_accel = g_strdup(NAME_TAB_ACCEL_DEF);
diff --git a/src/setting.h b/src/setting.h
index e458d14..96695b8 100644
--- a/src/setting.h
+++ b/src/setting.h
@@ -57,6 +57,7 @@
 #define CLOSE_WINDOW_ACCEL "close_window_accel"
 #define COPY_ACCEL "copy_accel"
 #define PASTE_ACCEL "paste_accel"
+#define FULLSCREEN_ACCEL "fullscreen_accel"
 #define NAME_TAB_ACCEL "name_tab_accel"
 #define PREVIOUS_TAB_ACCEL "previous_tab_accel"
 #define NEXT_TAB_ACCEL "next_tab_accel"
@@ -80,6 +81,7 @@
 #define ZOOM_IN_ACCEL_DEF "<Primary><Shift>plus"
 #define ZOOM_OUT_ACCEL_DEF "<Primary><Shift>underscore"
 #define ZOOM_RESET_ACCEL_DEF "<Primary><Shift>parenright"
+#define FULLSCREEN_ACCEL_DEF "F11"

 /* User preferences. */
 typedef struct _setting {
@@ -127,6 +129,7 @@ typedef struct _setting {
     char * close_window_accel;      /* CLOSE_WINDOW_ACCEL */
     char * copy_accel;      /* COPY_ACCEL */
     char * paste_accel;     /* PASTE_ACCEL */
+    char * fullscreen_accel;     /* FULLSCREEN_ACCEL */
     char * name_tab_accel;      /* NAME_TAB_ACCEL */
     char * previous_tab_accel;      /* PREVIOUS_TAB_ACCEL */
     char * next_tab_accel;      /* NEXT_TAB_ACCEL */
-- 
davesp commented 2 years ago

If LXDE isn't running, why not use xterm?

xinligg commented 2 years ago

Because I want to use tabs,it's funy.

wdlkmpx commented 2 years ago

Thanks for sharing your patch, with some minor tweaks now it works fine for me

This feature is worth adding, I'm not running the full lxde, but I use several lxde apps and pcmanfm has a fullscreen option in the View menu

xterm doesn't seem to support fullscreen

xinligg commented 2 years ago

Thanks for sharing your patch, with some minor tweaks now it works fine for me

This feature is worth adding, I'm not running the full lxde, but I use several lxde apps and pcmanfm has a fullscreen option in the View menu

xterm doesn't seem to support fullscreen

3qs!And i fixed a bug with keyboard shortcuts. xterm supoort fullscreen..

xinligg commented 2 years ago
From 4d3fb0b87ca5a3cbdf84250b39cc1a9e0bdaeeee Mon Sep 17 00:00:00 2001
From: xinli <xinligg@gmail.com>
Date: Fri, 15 Apr 2022 09:47:25 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BF=AB=E6=8D=B7=E9=94=AE?=
 =?UTF-8?q?=E4=B8=8D=E5=AF=B9=E5=BA=94=E7=9A=84BUG?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/lxterminal.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lxterminal.c b/src/lxterminal.c
index bb549b0..ed19a03 100644
--- a/src/lxterminal.c
+++ b/src/lxterminal.c
@@ -129,7 +129,6 @@ static GtkActionEntry menu_items[] =
 {
 /* 0 */    { "File", NULL, N_("_File"), NULL, NULL, NULL },
 /* 1 */    { "Edit", NULL, N_("_Edit"), NULL, NULL, NULL },
-/*   */    { "View", NULL, N_("_View"), NULL, NULL, NULL },
 /* 2 */    { "Tabs", NULL, N_("_Tabs"), NULL, NULL, NULL },
 /* 3 */    { "Help", NULL, N_("_Help"), NULL, NULL, NULL },
 /* 4 */    { "File_NewWindow", "list-add", N_("_New Window"), NEW_WINDOW_ACCEL_DEF, "New Window", G_CALLBACK(terminal_new_window_activate_event) },
@@ -152,6 +151,7 @@ static GtkActionEntry menu_items[] =
 /* 21 */    { "Tabs_MoveTabLeft", NULL, N_("Move Tab _Left"), MOVE_TAB_LEFT_ACCEL_DEF, "Move Tab Left", G_CALLBACK(terminal_move_tab_left_activate_event) },
 /* 22 */    { "Tabs_MoveTabRight", NULL, N_("Move Tab _Right"), MOVE_TAB_RIGHT_ACCEL_DEF, "Move Tab Right", G_CALLBACK(terminal_move_tab_right_activate_event) },
 /* 23 */    { "Help_About", "help-about", N_("_About"), NULL, "About", G_CALLBACK(terminal_about_activate_event) },
+/*   */    { "View", NULL, N_("_View"), NULL, NULL, NULL },
 };
 #define MENUBAR_MENUITEM_COUNT G_N_ELEMENTS(menu_items)
 static const GtkToggleActionEntry toggle_action_entries[] =
--