aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface-gtk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface-gtk.cpp')
-rw-r--r--src/interface-gtk.cpp33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/interface-gtk.cpp b/src/interface-gtk.cpp
index 900208c..3e1703e 100644
--- a/src/interface-gtk.cpp
+++ b/src/interface-gtk.cpp
@@ -90,6 +90,8 @@ InterfaceGtk::main_impl(int &argc, char **&argv)
vbox = gtk_vbox_new(FALSE, 0);
+ info_current = g_strdup(PACKAGE_NAME);
+
cmdline_widget = gtk_entry_new();
gtk_entry_set_has_frame(GTK_ENTRY(cmdline_widget), FALSE);
gtk_editable_set_editable(GTK_EDITABLE(cmdline_widget), FALSE);
@@ -168,28 +170,21 @@ InterfaceGtk::show_view_impl(ViewGtk *view)
void
InterfaceGtk::info_update_impl(const QRegister *reg)
{
- gchar *str;
gchar *name = String::canonicalize_ctl(reg->name);
- str = g_strconcat(PACKAGE_NAME " - <QRegister> ",
- name, NIL);
+ g_free(info_current);
+ info_current = g_strconcat(PACKAGE_NAME " - <QRegister> ",
+ name, NIL);
g_free(name);
-
- gtk_window_set_title(GTK_WINDOW(window), str);
- g_free(str);
}
void
InterfaceGtk::info_update_impl(const Buffer *buffer)
{
- gchar *str;
-
- str = g_strconcat(PACKAGE_NAME " - <Buffer> ",
- buffer->filename ? : UNNAMED_FILE,
- buffer->dirty ? "*" : "", NIL);
-
- gtk_window_set_title(GTK_WINDOW(window), str);
- g_free(str);
+ g_free(info_current);
+ info_current = g_strconcat(PACKAGE_NAME " - <Buffer> ",
+ buffer->filename ? : UNNAMED_FILE,
+ buffer->dirty ? "*" : "", NIL);
}
void
@@ -290,6 +285,7 @@ InterfaceGtk::widget_set_font(GtkWidget *widget, const gchar *font_name)
InterfaceGtk::~InterfaceGtk()
{
+ g_free(info_current);
if (popup_widget)
gtk_widget_destroy(popup_widget);
if (window)
@@ -376,6 +372,15 @@ handle_key_press(bool is_shift, bool is_ctl, guint keyval)
cmdline.keypress(key);
}
}
+
+ /*
+ * The info area is updated very often and setting the
+ * window title each time it is updated is VERY costly.
+ * So we set it here once after every keypress even if the
+ * info line did not change.
+ */
+ gtk_window_set_title(GTK_WINDOW(interface.window),
+ interface.info_current);
}
static gboolean