use std::unique_ptr in more places
This commit is contained in:
parent
e98ccd3821
commit
76a707b665
22
termite.cc
22
termite.cc
|
@ -219,9 +219,9 @@ static void launch_in_directory(VteTerminal *vte) {
|
||||||
static void find_urls(VteTerminal *vte, search_panel_info *panel_info) {
|
static void find_urls(VteTerminal *vte, search_panel_info *panel_info) {
|
||||||
GRegex *regex = g_regex_new(url_regex, G_REGEX_CASELESS, G_REGEX_MATCH_NOTEMPTY, nullptr);
|
GRegex *regex = g_regex_new(url_regex, G_REGEX_CASELESS, G_REGEX_MATCH_NOTEMPTY, nullptr);
|
||||||
GArray *attributes = g_array_new(FALSE, FALSE, sizeof (vte_char_attributes));
|
GArray *attributes = g_array_new(FALSE, FALSE, sizeof (vte_char_attributes));
|
||||||
char *content = vte_terminal_get_text(vte, nullptr, nullptr, attributes);
|
auto content = make_unique(vte_terminal_get_text(vte, nullptr, nullptr, attributes), g_free);
|
||||||
|
|
||||||
for (char *s_ptr = content, *saveptr; ; s_ptr = nullptr) {
|
for (char *s_ptr = content.get(), *saveptr; ; s_ptr = nullptr) {
|
||||||
const char *token = strtok_r(s_ptr, "\n", &saveptr);
|
const char *token = strtok_r(s_ptr, "\n", &saveptr);
|
||||||
if (!token) {
|
if (!token) {
|
||||||
break;
|
break;
|
||||||
|
@ -236,7 +236,7 @@ static void find_urls(VteTerminal *vte, search_panel_info *panel_info) {
|
||||||
g_match_info_fetch_pos(info, 0, &pos, nullptr);
|
g_match_info_fetch_pos(info, 0, &pos, nullptr);
|
||||||
|
|
||||||
const long first_row = g_array_index(attributes, vte_char_attributes, 0).row;
|
const long first_row = g_array_index(attributes, vte_char_attributes, 0).row;
|
||||||
const auto attr = g_array_index(attributes, vte_char_attributes, token + pos - content);
|
const auto attr = g_array_index(attributes, vte_char_attributes, token + pos - content.get());
|
||||||
|
|
||||||
panel_info->url_list.emplace_back(g_match_info_fetch(info, 0),
|
panel_info->url_list.emplace_back(g_match_info_fetch(info, 0),
|
||||||
attr.column,
|
attr.column,
|
||||||
|
@ -251,7 +251,6 @@ static void find_urls(VteTerminal *vte, search_panel_info *panel_info) {
|
||||||
g_error_free(error);
|
g_error_free(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g_free(content);
|
|
||||||
g_regex_unref(regex);
|
g_regex_unref(regex);
|
||||||
g_array_free(attributes, TRUE);
|
g_array_free(attributes, TRUE);
|
||||||
}
|
}
|
||||||
|
@ -458,11 +457,9 @@ static void move_to_row_start(VteTerminal *vte, select_info *select, long row) {
|
||||||
static void open_selection(char *browser, VteTerminal *vte) {
|
static void open_selection(char *browser, VteTerminal *vte) {
|
||||||
if (browser) {
|
if (browser) {
|
||||||
AtkText *text = ATK_TEXT(vte_terminal_accessible_new(vte));
|
AtkText *text = ATK_TEXT(vte_terminal_accessible_new(vte));
|
||||||
char *selection = atk_text_get_selection(text, 0, nullptr, nullptr);
|
auto selection = make_unique(atk_text_get_selection(text, 0, nullptr, nullptr), g_free);
|
||||||
if (selection && selection[0]) {
|
if (selection && *selection)
|
||||||
launch_browser(browser, selection);
|
launch_browser(browser, selection.get());
|
||||||
}
|
|
||||||
g_free(selection);
|
|
||||||
} else {
|
} else {
|
||||||
g_printerr("no browser to open url\n");
|
g_printerr("no browser to open url\n");
|
||||||
}
|
}
|
||||||
|
@ -985,18 +982,17 @@ gboolean position_overlay_cb(GtkBin *overlay, GtkWidget *widget, GdkRectangle *a
|
||||||
|
|
||||||
gboolean button_press_cb(VteTerminal *vte, GdkEventButton *event, const config_info *info) {
|
gboolean button_press_cb(VteTerminal *vte, GdkEventButton *event, const config_info *info) {
|
||||||
if (info->clickable_url && event->type == GDK_BUTTON_PRESS) {
|
if (info->clickable_url && event->type == GDK_BUTTON_PRESS) {
|
||||||
char *match = check_match(vte, (int)event->x, (int)event->y);
|
auto match = make_unique(check_match(vte, (int)event->x, (int)event->y), g_free);
|
||||||
if (!match)
|
if (!match)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (event->button == 1) {
|
if (event->button == 1) {
|
||||||
launch_browser(info->browser, match);
|
launch_browser(info->browser, match.get());
|
||||||
} else if(event->button == 3) {
|
} else if(event->button == 3) {
|
||||||
GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
|
GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
|
||||||
gtk_clipboard_set_text(clipboard, match, -1);
|
gtk_clipboard_set_text(clipboard, match.get(), -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free(match);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in New Issue