Re: How to get information about focus from other then my application?



Hi thanks for reply eleoAnatoly

I do as Anatoly suggest me:
http://mail.gnome.org/archives/gtk-app-devel-list/2005-January/msg00005.
html
but my program still doesnt work correct, i write simple code, please
look below:

<== BEGIN CODE ==>

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <X11/Xlib.h>

static GdkFilterReturn event_monitor (GdkXEvent *gdkxevent, GdkEvent
*event,gpointer ptr)
 {
    XEvent *ev = (XEvent *) gdkxevent;
    Window win;
    int type;

    if (ev->type == FocusIn || ev->type == FocusOut)
    {
        XGetInputFocus(GDK_DISPLAY(), &win, &type);
        g_print("Event type %d\n",(int)ev->type);
    }
    return GDK_FILTER_CONTINUE;
 }

static void hello( GtkWidget *widget,
                   gpointer   data )
{
    g_print("End program\n");
}

static gboolean delete_event( GtkWidget *widget,
                              GdkEvent  *event,
                              gpointer   data )
{
    g_print ("delete event occurred\n");
    return FALSE;
}

static void destroy( GtkWidget *widget,
                     gpointer   data )
{
    gdk_window_remove_filter (gdk_get_default_root_window
(),eleo(GdkFilterFunc)event_monitor,NULL);
    gtk_main_quit ();
}

int main( int   argc,char *argv[] )
{
    GtkWidget *window;
    GtkWidget *button;

    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    XSelectInput(GDK_DISPLAY(), GDK_ROOT_WINDOW(), FocusChangeMask);
 
gdk_window_add_filter(gdk_get_default_root_window(),eleo(GdkFilterFunc)e
vent_monitor, NULL);

    g_signal_connect (G_OBJECT (window), "delete_event",
                      G_CALLBACK (delete_event), NULL);
    g_signal_connect (G_OBJECT (window), "destroy",
                      G_CALLBACK (destroy), NULL);


    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    button = gtk_button_new_with_label ("Hello World");
    g_signal_connect (G_OBJECT (button), "clicked",
                      G_CALLBACK (hello), NULL);
    g_signal_connect_swapped (G_OBJECT (button), "clicked",
                              G_CALLBACK (gtk_widget_destroy),
                              G_OBJECT (window));

    gtk_container_add (GTK_CONTAINER (window), button);
    gtk_widget_show (button);
    gtk_widget_show (window);

    gtk_main ();
    return 0;
}

<== END CODE ==>

And in my function event_monitor I dont receive any message at all, when
i remove gdk_get_default_root_window() from gdk_window_add_filter and
place there NULL
I only receive events from my application, do someone know what can help
me to
Receive information from any application which are running???
I will be grateful to end of my life if someone help me

Greats
Michal






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]