Merge pull request #568 from dotdash/leak
Revert "Use std::make_unique from c++14 #360"
This commit is contained in:
commit
3dcf389430
4
Makefile
4
Makefile
|
@ -4,7 +4,7 @@ GTK = gtk+-3.0
|
||||||
VTE = vte-2.91
|
VTE = vte-2.91
|
||||||
TERMINFO = ${PREFIX}/share/terminfo
|
TERMINFO = ${PREFIX}/share/terminfo
|
||||||
|
|
||||||
CXXFLAGS := -std=c++14 -O3 \
|
CXXFLAGS := -std=c++11 -O3 \
|
||||||
-Wall -Wextra -pedantic \
|
-Wall -Wextra -pedantic \
|
||||||
-Winit-self \
|
-Winit-self \
|
||||||
-Wshadow \
|
-Wshadow \
|
||||||
|
@ -32,7 +32,7 @@ endif
|
||||||
LDFLAGS := -s -Wl,--as-needed ${LDFLAGS}
|
LDFLAGS := -s -Wl,--as-needed ${LDFLAGS}
|
||||||
LDLIBS := ${shell pkg-config --libs ${GTK} ${VTE}}
|
LDLIBS := ${shell pkg-config --libs ${GTK} ${VTE}}
|
||||||
|
|
||||||
termite: termite.cc url_regex.hh util/clamp.hh util/maybe.hh
|
termite: termite.cc url_regex.hh util/clamp.hh util/maybe.hh util/memory.hh
|
||||||
${CXX} ${CXXFLAGS} ${LDFLAGS} $< ${LDLIBS} -o $@
|
${CXX} ${CXXFLAGS} ${LDFLAGS} $< ${LDLIBS} -o $@
|
||||||
|
|
||||||
install: termite termite.desktop termite.terminfo
|
install: termite termite.desktop termite.terminfo
|
||||||
|
|
25
termite.cc
25
termite.cc
|
@ -42,6 +42,7 @@
|
||||||
#include "url_regex.hh"
|
#include "url_regex.hh"
|
||||||
#include "util/clamp.hh"
|
#include "util/clamp.hh"
|
||||||
#include "util/maybe.hh"
|
#include "util/maybe.hh"
|
||||||
|
#include "util/memory.hh"
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
|
|
||||||
|
@ -296,18 +297,18 @@ static void launch_in_directory(VteTerminal *vte) {
|
||||||
g_printerr("no directory uri set\n");
|
g_printerr("no directory uri set\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto dir = std::make_unique<gchar*>(g_filename_from_uri(uri, nullptr, nullptr));
|
auto dir = make_unique(g_filename_from_uri(uri, nullptr, nullptr), g_free);
|
||||||
char term[] = "termite"; // maybe this should be argv[0]
|
char term[] = "termite"; // maybe this should be argv[0]
|
||||||
char *cmd[] = {term, nullptr};
|
char *cmd[] = {term, nullptr};
|
||||||
g_spawn_async(*dir.get(), cmd, nullptr, G_SPAWN_SEARCH_PATH, nullptr, nullptr, nullptr, nullptr);
|
g_spawn_async(dir.get(), cmd, nullptr, G_SPAWN_SEARCH_PATH, nullptr, nullptr, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
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(VteCharAttributes));
|
GArray *attributes = g_array_new(FALSE, FALSE, sizeof(VteCharAttributes));
|
||||||
auto content = std::make_unique<gchar*>(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.get(), *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;
|
||||||
|
@ -322,7 +323,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, VteCharAttributes, 0).row;
|
const long first_row = g_array_index(attributes, VteCharAttributes, 0).row;
|
||||||
const auto attr = g_array_index(attributes, VteCharAttributes, token + pos - *content.get());
|
const auto attr = g_array_index(attributes, VteCharAttributes, 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,
|
||||||
|
@ -569,9 +570,9 @@ static void open_selection(char *browser, VteTerminal *vte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (browser) {
|
if (browser) {
|
||||||
auto selection = std::make_unique<gchar*>(vte_terminal_get_selection(vte));
|
auto selection = make_unique(vte_terminal_get_selection(vte), g_free);
|
||||||
if (selection && *selection) {
|
if (selection && *selection) {
|
||||||
launch_browser(browser, *selection.get());
|
launch_browser(browser, selection.get());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
g_printerr("no browser to open url\n");
|
g_printerr("no browser to open url\n");
|
||||||
|
@ -1182,21 +1183,21 @@ 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) {
|
||||||
#if VTE_CHECK_VERSION (0, 49, 1)
|
#if VTE_CHECK_VERSION (0, 49, 1)
|
||||||
auto match = std::make_unique<gchar*>(vte_terminal_hyperlink_check_event(vte, (GdkEvent*)event));
|
auto match = make_unique(vte_terminal_hyperlink_check_event(vte, (GdkEvent*)event), g_free);
|
||||||
if (!match) {
|
if (!match) {
|
||||||
match = std::make_unique<gchar*>(check_match(vte, event));
|
match = make_unique(check_match(vte, event), g_free);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
auto match = std::make_unique<gchar*>(check_match(vte, event));
|
auto match = make_unique(check_match(vte, event), g_free);
|
||||||
#endif
|
#endif
|
||||||
if (!match)
|
if (!match)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (event->button == 1) {
|
if (event->button == 1) {
|
||||||
launch_browser(info->browser, *match.get());
|
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.get(), -1);
|
gtk_clipboard_set_text(clipboard, match.get(), -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in New Issue