qulogic/libgnt

Merged in default (pull request #78)

2019-05-21, Gary Kramlich
4e6d829dcbc5
Merged in default (pull request #78)

Clear the main loop on WM destruction.

Approved-by: Gary Kramlich
  • +13 -8
    gntmain.c
  • +1 -1
    gnttree.c
  • +3 -1
    gntwidget.c
  • +3 -2
    gntwm.c
  • +12 -6
    test/multiwin.c
  • --- a/gntmain.c Sun May 19 02:50:51 2019 -0400
    +++ b/gntmain.c Tue May 21 01:20:54 2019 +0000
    @@ -103,7 +103,7 @@
    #define HOLDING_ESCAPE (escape_stuff.timer != 0)
    static struct {
    - int timer;
    + guint timer;
    } escape_stuff;
    static gboolean
    @@ -270,7 +270,7 @@
    {
    /* XXX: it throws an error after evey io_invoke, I have no idea why */
    #ifndef _WIN32
    - int id = GPOINTER_TO_INT(data);
    + guint id = GPOINTER_TO_UINT(data);
    g_source_remove(id);
    g_io_channel_unref(source);
    @@ -438,7 +438,7 @@
    static void
    setup_io()
    {
    - int result;
    + guint result;
    #ifdef _WIN32
    channel = g_io_channel_win32_new_fd(STDIN_FILENO);
    @@ -457,9 +457,9 @@
    (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
    io_invoke, NULL, NULL);
    - channel_error_callback = g_io_add_watch_full(channel, G_PRIORITY_HIGH,
    - (G_IO_NVAL),
    - io_invoke_error, GINT_TO_POINTER(result), NULL);
    + channel_error_callback = g_io_add_watch_full(
    + channel, G_PRIORITY_HIGH, (G_IO_NVAL), io_invoke_error,
    + GUINT_TO_POINTER(result), NULL);
    g_io_channel_unref(channel);
    }
    @@ -776,8 +776,12 @@
    void gnt_quit()
    {
    /* Prevent io_invoke() from being called after wm is destroyed */
    - g_source_remove(channel_error_callback);
    - g_source_remove(channel_read_callback);
    + if (channel_error_callback) {
    + g_source_remove(channel_error_callback);
    + }
    + if (channel_read_callback) {
    + g_source_remove(channel_read_callback);
    + }
    channel_error_callback = 0;
    channel_read_callback = 0;
    @@ -907,6 +911,7 @@
    cp->callback = callback;
    cp->data = data;
    g_source_remove(channel_read_callback);
    + channel_read_callback = 0;
    gnt_wm_set_keypress_mode(wm, GNT_KP_MODE_WAIT_ON_CHILD);
    g_child_watch_add(pid, reap_child, cp);
    --- a/gnttree.c Sun May 19 02:50:51 2019 -0400
    +++ b/gnttree.c Tue May 21 01:20:54 2019 +0000
    @@ -90,7 +90,7 @@
    gboolean show_separator; /* Whether to show column separators */
    GString *search;
    - int search_timeout;
    + guint search_timeout;
    int search_column;
    gboolean (*search_func)(GntTree *tree, gpointer key, const char *search, const char *current);
    --- a/gntwidget.c Sun May 19 02:50:51 2019 -0400
    +++ b/gntwidget.c Tue May 21 01:20:54 2019 +0000
    @@ -123,7 +123,9 @@
    GntWidgetPrivate *priv = gnt_widget_get_instance_private(self);
    g_signal_emit(self, signals[SIG_DESTROY], 0);
    - g_source_remove(priv->queue_update);
    + if (priv->queue_update) {
    + g_source_remove(priv->queue_update);
    + }
    G_OBJECT_CLASS(gnt_widget_parent_class)->dispose(obj);
    }
    --- a/gntwm.c Sun May 19 02:50:51 2019 -0400
    +++ b/gntwm.c Tue May 21 01:20:54 2019 +0000
    @@ -144,7 +144,7 @@
    static void ensure_normal_mode(GntWMPrivate *priv);
    static gboolean write_already(gpointer data);
    -static int write_timeout;
    +static guint write_timeout;
    static time_t last_active_time;
    static gboolean idle_update;
    static GList *act = NULL; /* list of WS with unseen activitiy */
    @@ -1505,6 +1505,8 @@
    g_list_free_full(priv->workspaces, g_object_unref);
    priv->workspaces = NULL;
    + g_clear_pointer(&priv->loop, g_main_loop_unref);
    +
    #ifdef USE_PYTHON
    if (started_python) {
    Py_Finalize();
    @@ -2292,7 +2294,6 @@
    }
    g_free(filename);
    - g_source_remove(write_timeout);
    write_timeout = 0;
    return FALSE;
    }
    --- a/test/multiwin.c Sun May 19 02:50:51 2019 -0400
    +++ b/test/multiwin.c Tue May 21 01:20:54 2019 +0000
    @@ -21,6 +21,8 @@
    #endif
    GntWidget *hbox, *tree, *box2;
    + gchar buf[(430 - 110) * 4]; /* 3 digits + NUL each */
    + gint i;
    hbox = gnt_box_new(FALSE, TRUE);
    box2 = gnt_box_new(FALSE, TRUE);
    @@ -65,12 +67,16 @@
    gnt_tree_add_row_after(GNT_TREE(tree), "6", gnt_tree_create_row(GNT_TREE(tree), "6", " long text", "a2"), "4", NULL);
    - int i;
    - for (i = 110; i < 430; i++)
    - {
    - char *s;
    - s = g_strdup_printf("%d", i); /* XXX: yes, leaking */
    - gnt_tree_add_row_after(GNT_TREE(tree), s, gnt_tree_create_row(GNT_TREE(tree), s, " long text", "a2"), "4", NULL);
    + for (i = 110; i < 430; i++) {
    + gchar *s = buf + (i - 110) * 4;
    + gint n = sizeof(buf) - (i - 110) * 4;
    + if (g_snprintf(s, n, "%d", i) > n) {
    + g_assert_not_reached();
    + }
    + gnt_tree_add_row_after(GNT_TREE(tree), s,
    + gnt_tree_create_row(GNT_TREE(tree), s,
    + " long text", "a2"),
    + "4", NULL);
    }
    gnt_tree_set_row_flags(GNT_TREE(tree), "e", GNT_TEXT_FLAG_DIM);