How to properly catch CTRL+SHIFT+C (GTK3)

I need to catch CTRL+SHIFT+C and for this I was using the following:

#include <gtk/gtk.h>

GtkWidget *createWindow ( const gint width, const gint height );
gboolean ctrl_plus_shift_plus_C_key_callback ( GtkWidget *widget, GdkEventKey *event );

int main ( void )
{
    GtkWidget *window;
    gtk_init ( NULL, NULL );
    window = createWindow ( 200, 200 );
    g_signal_connect_swapped ( window, "key_press_event", G_CALLBACK ( ctrl_plus_shift_plus_C_key_callback ), NULL );
    /// ***
    gtk_widget_show_all ( window );
    gtk_main();
}

GtkWidget *createWindow ( const gint width, const gint height )
{
    GtkWidget *window = gtk_window_new  ( GTK_WINDOW_TOPLEVEL );
    gtk_widget_set_events ( window, GDK_KEY_PRESS_MASK );
    /// ***
    g_signal_connect ( window, "destroy", gtk_main_quit, window );
    gtk_widget_set_size_request         ( window, width, height );
    gtk_container_set_border_width      ( GTK_CONTAINER ( window ), 50 );
    return window;
}

gboolean ctrl_plus_shift_plus_C_key_callback ( GtkWidget *widget, GdkEventKey *event )
{
    ( void ) widget;
    if ( event->state & ( GDK_CONTROL_MASK | GDK_SHIFT_MASK  ) )
    {
        if ( event->keyval == GDK_KEY_c ||  event->keyval == GDK_KEY_C )
        {
            g_print ( "CTRL + SHIFT + C was catched\n" );
        }

        return FALSE;
    }

    return TRUE;
}

The program works fine as expected, or at least I was sure about it.
When I press CTRL+SHIFT+C I get the following Output:

CTRL + SHIFT + C was catched
But this happens also if I press CTRL + C or SHIFT + C.
How do I need to handle this so that It works only for CTRL+SHIFT+C?

Looks like you should use

 if ( (event->state & ( GDK_CONTROL_MASK | GDK_SHIFT_MASK  )) == ( GDK_CONTROL_MASK | GDK_SHIFT_MASK  ))
ā€¦
1 Like

OH, that was easy ( and fast) :)). Do you know how can I catch CTRL+SHIFT+ALT+C also? Thank you.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.