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