cleanup the mess of structures somewhat
This commit is contained in:
		
							parent
							
								
									7982fac85c
								
							
						
					
					
						commit
						181723932f
					
				
							
								
								
									
										46
									
								
								termite.cc
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								termite.cc
									
									
									
									
									
								
							@ -70,7 +70,6 @@ struct url_data {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct search_panel_info {
 | 
					struct search_panel_info {
 | 
				
			||||||
    VteTerminal *vte;
 | 
					 | 
				
			||||||
    GtkWidget *entry;
 | 
					    GtkWidget *entry;
 | 
				
			||||||
    GtkWidget *panel;
 | 
					    GtkWidget *panel;
 | 
				
			||||||
    GtkWidget *da;
 | 
					    GtkWidget *da;
 | 
				
			||||||
@ -94,12 +93,15 @@ struct config_info {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct keybind_info {
 | 
					struct keybind_info {
 | 
				
			||||||
 | 
					    GtkWindow *window;
 | 
				
			||||||
 | 
					    VteTerminal *vte;
 | 
				
			||||||
    search_panel_info panel;
 | 
					    search_panel_info panel;
 | 
				
			||||||
    select_info select;
 | 
					    select_info select;
 | 
				
			||||||
    config_info config;
 | 
					    config_info config;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct draw_cb_info {
 | 
					struct draw_cb_info {
 | 
				
			||||||
 | 
					    VteTerminal *vte;
 | 
				
			||||||
    search_panel_info *panel;
 | 
					    search_panel_info *panel;
 | 
				
			||||||
    hint_info *hints;
 | 
					    hint_info *hints;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -116,7 +118,7 @@ static gboolean focus_cb(GtkWindow *window);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static GtkTreeModel *create_completion_model(VteTerminal *vte);
 | 
					static GtkTreeModel *create_completion_model(VteTerminal *vte);
 | 
				
			||||||
static void search(VteTerminal *vte, const char *pattern, bool reverse);
 | 
					static void search(VteTerminal *vte, const char *pattern, bool reverse);
 | 
				
			||||||
static void overlay_show(search_panel_info *info, overlay_mode mode, bool complete);
 | 
					static void overlay_show(search_panel_info *info, overlay_mode mode, VteTerminal *vte);
 | 
				
			||||||
static void get_vte_padding(VteTerminal *vte, int *w, int *h);
 | 
					static void get_vte_padding(VteTerminal *vte, int *w, int *h);
 | 
				
			||||||
static char *check_match(VteTerminal *vte, int event_x, int event_y);
 | 
					static char *check_match(VteTerminal *vte, int event_x, int event_y);
 | 
				
			||||||
static void load_config(GtkWindow *window, VteTerminal *vte, config_info *info,
 | 
					static void load_config(GtkWindow *window, VteTerminal *vte, config_info *info,
 | 
				
			||||||
@ -277,10 +279,10 @@ static gboolean draw_cb(const draw_cb_info *info, cairo_t *cr) {
 | 
				
			|||||||
    if (!info->panel->url_list.empty()) {
 | 
					    if (!info->panel->url_list.empty()) {
 | 
				
			||||||
        char buffer[std::numeric_limits<unsigned>::digits10 + 1];
 | 
					        char buffer[std::numeric_limits<unsigned>::digits10 + 1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const long cw = vte_terminal_get_char_width(info->panel->vte);
 | 
					        const long cw = vte_terminal_get_char_width(info->vte);
 | 
				
			||||||
        const long ch = vte_terminal_get_char_height(info->panel->vte);
 | 
					        const long ch = vte_terminal_get_char_height(info->vte);
 | 
				
			||||||
        const PangoFontDescription *desc = info->hints->font ?
 | 
					        const PangoFontDescription *desc = info->hints->font ?
 | 
				
			||||||
            info->hints->font : vte_terminal_get_font(info->panel->vte);
 | 
					            info->hints->font : vte_terminal_get_font(info->vte);
 | 
				
			||||||
        size_t len = info->panel->fulltext == nullptr ?
 | 
					        size_t len = info->panel->fulltext == nullptr ?
 | 
				
			||||||
            0 : strlen(info->panel->fulltext);
 | 
					            0 : strlen(info->panel->fulltext);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -619,7 +621,7 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
 | 
				
			|||||||
        if (modifiers == GDK_CONTROL_MASK) {
 | 
					        if (modifiers == GDK_CONTROL_MASK) {
 | 
				
			||||||
            switch (gdk_keyval_to_lower(event->keyval)) {
 | 
					            switch (gdk_keyval_to_lower(event->keyval)) {
 | 
				
			||||||
                case GDK_KEY_bracketleft:
 | 
					                case GDK_KEY_bracketleft:
 | 
				
			||||||
                    exit_command_mode(info->panel.vte, &info->select);
 | 
					                    exit_command_mode(vte, &info->select);
 | 
				
			||||||
                    gtk_widget_hide(info->panel.da);
 | 
					                    gtk_widget_hide(info->panel.da);
 | 
				
			||||||
                    gtk_widget_hide(info->panel.panel);
 | 
					                    gtk_widget_hide(info->panel.panel);
 | 
				
			||||||
                    info->panel.url_list.clear();
 | 
					                    info->panel.url_list.clear();
 | 
				
			||||||
@ -654,7 +656,7 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        switch (event->keyval) {
 | 
					        switch (event->keyval) {
 | 
				
			||||||
            case GDK_KEY_Escape:
 | 
					            case GDK_KEY_Escape:
 | 
				
			||||||
                exit_command_mode(info->panel.vte, &info->select);
 | 
					                exit_command_mode(vte, &info->select);
 | 
				
			||||||
                gtk_widget_hide(info->panel.da);
 | 
					                gtk_widget_hide(info->panel.da);
 | 
				
			||||||
                gtk_widget_hide(info->panel.panel);
 | 
					                gtk_widget_hide(info->panel.panel);
 | 
				
			||||||
                info->panel.url_list.clear();
 | 
					                info->panel.url_list.clear();
 | 
				
			||||||
@ -713,10 +715,10 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
 | 
				
			|||||||
                vte_terminal_copy_clipboard(vte);
 | 
					                vte_terminal_copy_clipboard(vte);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case GDK_KEY_slash:
 | 
					            case GDK_KEY_slash:
 | 
				
			||||||
                overlay_show(&info->panel, overlay_mode::search, true);
 | 
					                overlay_show(&info->panel, overlay_mode::search, vte);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case GDK_KEY_question:
 | 
					            case GDK_KEY_question:
 | 
				
			||||||
                overlay_show(&info->panel, overlay_mode::rsearch, true);
 | 
					                overlay_show(&info->panel, overlay_mode::rsearch, vte);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case GDK_KEY_n:
 | 
					            case GDK_KEY_n:
 | 
				
			||||||
                vte_terminal_search_find_next(vte);
 | 
					                vte_terminal_search_find_next(vte);
 | 
				
			||||||
@ -742,7 +744,7 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
 | 
				
			|||||||
            case GDK_KEY_x:
 | 
					            case GDK_KEY_x:
 | 
				
			||||||
                find_urls(vte, &info->panel);
 | 
					                find_urls(vte, &info->panel);
 | 
				
			||||||
                gtk_widget_show(info->panel.da);
 | 
					                gtk_widget_show(info->panel.da);
 | 
				
			||||||
                overlay_show(&info->panel, overlay_mode::urlselect, false);
 | 
					                overlay_show(&info->panel, overlay_mode::urlselect, nullptr);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case GDK_KEY_plus:
 | 
					            case GDK_KEY_plus:
 | 
				
			||||||
                update_font_size(vte, 1);
 | 
					                update_font_size(vte, 1);
 | 
				
			||||||
@ -765,7 +767,7 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
 | 
				
			|||||||
                enter_command_mode(vte, &info->select);
 | 
					                enter_command_mode(vte, &info->select);
 | 
				
			||||||
                find_urls(vte, &info->panel);
 | 
					                find_urls(vte, &info->panel);
 | 
				
			||||||
                gtk_widget_show(info->panel.da);
 | 
					                gtk_widget_show(info->panel.da);
 | 
				
			||||||
                overlay_show(&info->panel, overlay_mode::urlselect, false);
 | 
					                overlay_show(&info->panel, overlay_mode::urlselect, nullptr);
 | 
				
			||||||
                exit_command_mode(vte, &info->select);
 | 
					                exit_command_mode(vte, &info->select);
 | 
				
			||||||
                return TRUE;
 | 
					                return TRUE;
 | 
				
			||||||
            case GDK_KEY_c:
 | 
					            case GDK_KEY_c:
 | 
				
			||||||
@ -780,7 +782,7 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
 | 
				
			|||||||
                return TRUE;
 | 
					                return TRUE;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else if (modifiers == GDK_CONTROL_MASK && event->keyval == GDK_KEY_Tab) {
 | 
					    } else if (modifiers == GDK_CONTROL_MASK && event->keyval == GDK_KEY_Tab) {
 | 
				
			||||||
        overlay_show(&info->panel, overlay_mode::completion, true);
 | 
					        overlay_show(&info->panel, overlay_mode::completion, vte);
 | 
				
			||||||
        return TRUE;
 | 
					        return TRUE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return FALSE;
 | 
					    return FALSE;
 | 
				
			||||||
@ -858,13 +860,13 @@ gboolean entry_key_press_cb(GtkEntry *entry, GdkEventKey *event, keybind_info *i
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            switch (info->panel.mode) {
 | 
					            switch (info->panel.mode) {
 | 
				
			||||||
                case overlay_mode::search:
 | 
					                case overlay_mode::search:
 | 
				
			||||||
                    search(info->panel.vte, text, false);
 | 
					                    search(info->vte, text, false);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case overlay_mode::rsearch:
 | 
					                case overlay_mode::rsearch:
 | 
				
			||||||
                    search(info->panel.vte, text, true);
 | 
					                    search(info->vte, text, true);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case overlay_mode::completion:
 | 
					                case overlay_mode::completion:
 | 
				
			||||||
                    vte_terminal_feed_child(info->panel.vte, text, -1);
 | 
					                    vte_terminal_feed_child(info->vte, text, -1);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case overlay_mode::urlselect:
 | 
					                case overlay_mode::urlselect:
 | 
				
			||||||
                    launch_url(info->config.browser, text, &info->panel);
 | 
					                    launch_url(info->config.browser, text, &info->panel);
 | 
				
			||||||
@ -885,7 +887,7 @@ gboolean entry_key_press_cb(GtkEntry *entry, GdkEventKey *event, keybind_info *i
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        info->panel.mode = overlay_mode::hidden;
 | 
					        info->panel.mode = overlay_mode::hidden;
 | 
				
			||||||
        gtk_widget_hide(info->panel.panel);
 | 
					        gtk_widget_hide(info->panel.panel);
 | 
				
			||||||
        gtk_widget_grab_focus(GTK_WIDGET(info->panel.vte));
 | 
					        gtk_widget_grab_focus(GTK_WIDGET(info->vte));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -979,13 +981,13 @@ void search(VteTerminal *vte, const char *pattern, bool reverse) {
 | 
				
			|||||||
    vte_terminal_copy_primary(vte);
 | 
					    vte_terminal_copy_primary(vte);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void overlay_show(search_panel_info *info, overlay_mode mode, bool complete) {
 | 
					void overlay_show(search_panel_info *info, overlay_mode mode, VteTerminal *vte) {
 | 
				
			||||||
    if (complete) {
 | 
					    if (vte) {
 | 
				
			||||||
        GtkEntryCompletion *completion = gtk_entry_completion_new();
 | 
					        GtkEntryCompletion *completion = gtk_entry_completion_new();
 | 
				
			||||||
        gtk_entry_set_completion(GTK_ENTRY(info->entry), completion);
 | 
					        gtk_entry_set_completion(GTK_ENTRY(info->entry), completion);
 | 
				
			||||||
        g_object_unref(completion);
 | 
					        g_object_unref(completion);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        GtkTreeModel *completion_model = create_completion_model(info->vte);
 | 
					        GtkTreeModel *completion_model = create_completion_model(vte);
 | 
				
			||||||
        gtk_entry_completion_set_model(completion, completion_model);
 | 
					        gtk_entry_completion_set_model(completion, completion_model);
 | 
				
			||||||
        g_object_unref(completion_model);
 | 
					        g_object_unref(completion_model);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1356,8 +1358,8 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    keybind_info info {
 | 
					    keybind_info info {
 | 
				
			||||||
        {vte,
 | 
					        GTK_WINDOW(window), vte,
 | 
				
			||||||
         gtk_entry_new(),
 | 
					        {gtk_entry_new(),
 | 
				
			||||||
         gtk_alignment_new(0, 0, 1, 1),
 | 
					         gtk_alignment_new(0, 0, 1, 1),
 | 
				
			||||||
         gtk_drawing_area_new(),
 | 
					         gtk_drawing_area_new(),
 | 
				
			||||||
         overlay_mode::hidden,
 | 
					         overlay_mode::hidden,
 | 
				
			||||||
@ -1402,7 +1404,7 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
    g_signal_connect(panel_overlay, "get-child-position", G_CALLBACK(position_overlay_cb), nullptr);
 | 
					    g_signal_connect(panel_overlay, "get-child-position", G_CALLBACK(position_overlay_cb), nullptr);
 | 
				
			||||||
    g_signal_connect(vte, "button-press-event", G_CALLBACK(button_press_cb), &info.config);
 | 
					    g_signal_connect(vte, "button-press-event", G_CALLBACK(button_press_cb), &info.config);
 | 
				
			||||||
    g_signal_connect(vte, "beep", G_CALLBACK(beep_cb), &info.config.urgent_on_bell);
 | 
					    g_signal_connect(vte, "beep", G_CALLBACK(beep_cb), &info.config.urgent_on_bell);
 | 
				
			||||||
    draw_cb_info draw_cb_info{&info.panel, &info.config.hints};
 | 
					    draw_cb_info draw_cb_info{vte, &info.panel, &info.config.hints};
 | 
				
			||||||
    g_signal_connect_swapped(info.panel.da, "draw", G_CALLBACK(draw_cb), &draw_cb_info);
 | 
					    g_signal_connect_swapped(info.panel.da, "draw", G_CALLBACK(draw_cb), &draw_cb_info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_signal_connect(window, "focus-in-event",  G_CALLBACK(focus_cb), nullptr);
 | 
					    g_signal_connect(window, "focus-in-event",  G_CALLBACK(focus_cb), nullptr);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user