Hi Folks

Just to let you know that I found the solution. You just need to set the
skip taskbar window hint:

GtkWidget *window = gtk_application_window_new (GTK_APPLICATION (app));
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (state->window), TRUE);

This will cause the window to not be picked up by the gnome-shell
windowAttentionHandler:

https://github.com/GNOME/gnome-shell/blob/1af65c616ad381c4809f3c2120b0c0ce5a0676e0/js/ui/windowAttentionHandler.js#L33

Quite a beginner's mistake if you ask me :-)

Cheers,
Eduardo


On Mon, Nov 6, 2017 at 11:41 PM, Eduardo Nascimento <rebel...@gmail.com>
wrote:

> Hi Folks
>
> TL;DR:
> I'm using the GtkApplication "activate" signal to display a window.
> However sometimes the "window is ready" notification appears instead. See
> example code at the bottom of this email. Could you please let me know what
> am I missing?
>
> Long version:
>
> I'm new to gtk+ and as my first real application I'm coding a guake like
> terminal. I'm using GtkApplication where the terminal window is created
> inside the "startup" callback and later shown by the "activate" callback.
>
> This way my user can create a keyboard shortcut (F12 for example) that
> launches the application. If another instance of the application is already
> running the terminal window is toggled (hide/show) by the "activate"
> callback.
>
> However after launching the application a couple of times to hide/show the
> window the gnome "window is ready" notification is shown instead. Looks
> like DBus got confused or (most likely) I'm doing something terribly wrong.
>
> I noticed that if I change the window hint to 
> GDK_WINDOW_TYPE_HINT_SPLASHSCREEN
> (commented in the code below) it solves the problem but this is just a
> workaround and I want to understand what is really happening.
>
> Below you can see a short code example in case you want to try it for
> yourself. Just run the application multiple times to see the window hide
> and show until the "window is ready" notification is displayed.
>
> Example code:
>
> /*
>  * Compile: gcc toggle_window.c -o toggle_window `pkg-config --cflags
> --libs gtk+-3.0`
>  */
> #include <gtk/gtk.h>
>
> typedef struct app_state {
> GtkWidget *window;
> gboolean window_is_visible;
> } app_state;
>
> static void startup (GApplication *app, gpointer data)
> {
> app_state *state = (app_state *) data;
> state->window = gtk_application_window_new (GTK_APPLICATION (app));
> state->window_is_visible = FALSE;
> /* gtk_window_set_type_hint (GTK_WINDOW (state->window),
>   GDK_WINDOW_TYPE_HINT_SPLASHSCREEN); */
> }
>
> static void activate (GApplication *app, gpointer data)
> {
> app_state *state = (app_state *) data;
>
> /* Toggle window visibility */
> if (state->window_is_visible) {
> gtk_widget_hide (state->window);
> state->window_is_visible = FALSE;
> } else {
> gtk_window_present (GTK_WINDOW (state->window));
> state->window_is_visible = TRUE;
> }
> }
>
> int main (int argc, char **argv)
> {
> GtkApplication *app = gtk_application_new ("org.example.toggle.window",
>    G_APPLICATION_FLAGS_NONE);
> app_state state = {0};
> g_signal_connect (app, "startup", G_CALLBACK (startup), &state);
> g_signal_connect (app, "activate", G_CALLBACK (activate), &state);
> return g_application_run (G_APPLICATION (app), argc, argv);
> }
>
>
> Many thanks,
> Eduardo
>
>
>
_______________________________________________
gtk-list mailing list
gtk-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to