1 /*
2  * Copyright © 2001 Havoc Pennington
3  * Copyright © 2008 Christian Persch
4  * Copyright (C) 2012-2021 MATE Developers
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 3 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21 
22 #ifndef TERMINAL_SCREEN_H
23 #define TERMINAL_SCREEN_H
24 
25 #include <vte/vte.h>
26 
27 #include "terminal-profile.h"
28 
29 G_BEGIN_DECLS
30 
31 typedef enum
32 {
33     FLAVOR_AS_IS,
34     FLAVOR_DEFAULT_TO_HTTP,
35     FLAVOR_VOIP_CALL,
36     FLAVOR_EMAIL,
37     FLAVOR_SKEY
38 } TerminalURLFlavour;
39 
40 /* Forward decls */
41 typedef struct _TerminalScreenPopupInfo TerminalScreenPopupInfo;
42 typedef struct _TerminalWindow        TerminalWindow;
43 
44 #define TERMINAL_TYPE_SCREEN              (terminal_screen_get_type ())
45 #define TERMINAL_SCREEN(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), TERMINAL_TYPE_SCREEN, TerminalScreen))
46 #define TERMINAL_SCREEN_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), TERMINAL_TYPE_SCREEN, TerminalScreenClass))
47 #define TERMINAL_IS_SCREEN(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), TERMINAL_TYPE_SCREEN))
48 #define TERMINAL_IS_SCREEN_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), TERMINAL_TYPE_SCREEN))
49 #define TERMINAL_SCREEN_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), TERMINAL_TYPE_SCREEN, TerminalScreenClass))
50 
51 typedef struct _TerminalScreen        TerminalScreen;
52 typedef struct _TerminalScreenClass   TerminalScreenClass;
53 typedef struct _TerminalScreenPrivate TerminalScreenPrivate;
54 
55 struct _TerminalScreen
56 {
57 	VteTerminal parent_instance;
58 
59 	TerminalScreenPrivate *priv;
60 };
61 
62 struct _TerminalScreenClass
63 {
64 	VteTerminalClass parent_class;
65 
66 	void (* profile_set)        (TerminalScreen *screen,
67 	                             TerminalProfile *old_profile);
68 	void (* show_popup_menu)    (TerminalScreen *screen,
69 	                             TerminalScreenPopupInfo *info);
70 	gboolean (* match_clicked)  (TerminalScreen *screen,
71 	                             const char *url,
72 	                             int flavour,
73 	                             guint state);
74 	void (* close_screen)       (TerminalScreen *screen);
75 };
76 
77 GType terminal_screen_get_type (void) G_GNUC_CONST;
78 
79 TerminalScreen *terminal_screen_new (TerminalProfile *profile,
80                                      char           **override_command,
81                                      const char      *title,
82                                      const char      *working_dir,
83                                      char           **child_env,
84                                      double           zoom);
85 
86 void terminal_screen_set_profile (TerminalScreen *screen,
87                                   TerminalProfile *profile);
88 TerminalProfile* terminal_screen_get_profile (TerminalScreen *screen);
89 
90 void         terminal_screen_set_override_command (TerminalScreen  *screen,
91         char           **argv);
92 const char** terminal_screen_get_override_command (TerminalScreen  *screen);
93 
94 void         terminal_screen_set_initial_environment (TerminalScreen  *screen,
95         char           **argv);
96 char **      terminal_screen_get_initial_environment (TerminalScreen  *screen);
97 
98 const char* terminal_screen_get_raw_title      (TerminalScreen *screen);
99 const char* terminal_screen_get_title          (TerminalScreen *screen);
100 const char* terminal_screen_get_icon_title     (TerminalScreen *screen);
101 gboolean    terminal_screen_get_icon_title_set (TerminalScreen *screen);
102 
103 void terminal_screen_set_user_title (TerminalScreen *screen,
104                                      const char *text);
105 
106 void        terminal_screen_set_override_title     (TerminalScreen *screen,
107         const char     *title);
108 
109 const char *terminal_screen_get_dynamic_title      (TerminalScreen *screen);
110 const char *terminal_screen_get_dynamic_icon_title (TerminalScreen *screen);
111 
112 char *terminal_screen_get_current_dir (TerminalScreen *screen);
113 char *terminal_screen_get_current_dir_with_fallback (TerminalScreen *screen);
114 
115 void        terminal_screen_set_font (TerminalScreen *screen);
116 void        terminal_screen_set_font_scale    (TerminalScreen *screen,
117         double          factor);
118 double      terminal_screen_get_font_scale    (TerminalScreen *screen);
119 
120 void       terminal_screen_get_size (TerminalScreen *screen,
121                                      int *width_chars,
122                                      int *height_chars);
123 void       terminal_screen_get_cell_size (TerminalScreen *screen,
124         int *width_chars,
125         int *height_chars);
126 
127 void _terminal_screen_update_scrollbar (TerminalScreen *screen);
128 
129 void terminal_screen_save_config (TerminalScreen *screen,
130                                   GKeyFile *key_file,
131                                   const char *group);
132 
133 gboolean terminal_screen_has_foreground_process (TerminalScreen *screen);
134 
135 /* Allow scales a bit smaller and a bit larger than the usual pango ranges */
136 #define TERMINAL_SCALE_XXX_SMALL   (PANGO_SCALE_XX_SMALL/1.2)
137 #define TERMINAL_SCALE_XXXX_SMALL  (TERMINAL_SCALE_XXX_SMALL/1.2)
138 #define TERMINAL_SCALE_XXXXX_SMALL (TERMINAL_SCALE_XXXX_SMALL/1.2)
139 #define TERMINAL_SCALE_XXX_LARGE   (PANGO_SCALE_XX_LARGE*1.2)
140 #define TERMINAL_SCALE_XXXX_LARGE  (TERMINAL_SCALE_XXX_LARGE*1.2)
141 #define TERMINAL_SCALE_XXXXX_LARGE (TERMINAL_SCALE_XXXX_LARGE*1.2)
142 #define TERMINAL_SCALE_MINIMUM     (TERMINAL_SCALE_XXXXX_SMALL/1.2)
143 #define TERMINAL_SCALE_MAXIMUM     (TERMINAL_SCALE_XXXXX_LARGE*1.2)
144 
145 struct _TerminalScreenPopupInfo
146 {
147 	int ref_count;
148 	TerminalWindow *window;
149 	TerminalScreen *screen;
150 	char *string;
151 	TerminalURLFlavour flavour;
152 	guint button;
153 	guint state;
154 	guint32 timestamp;
155 };
156 
157 TerminalScreenPopupInfo *terminal_screen_popup_info_ref (TerminalScreenPopupInfo *info);
158 
159 void terminal_screen_popup_info_unref (TerminalScreenPopupInfo *info);
160 
161 G_END_DECLS
162 
163 #endif /* TERMINAL_SCREEN_H */
164