Initial commit
[atksocket-atkplug-example:mainline.git] / socket / ta-socket.c
1 /*
2  * Copyright (C) 2011 Igalia S.L.
3  * Authors: Mario Sanchez Prada <msanchez@igalia.com>
4  *
5  * Based on a C# example written in C# by Mike Gorse:
6  * http://mgorse.freeshell.org/plug-socket-test.tar.gz
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of version 3 of the GNU General Public
10  * License as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public
18  * License along with this program; if not, write to the
19  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  *
22  */
23 #include "ta-socket-label.h"
24
25 #include "ta-socket-accessible-factory.h"
26 #include <gtk/gtk.h>
27
28 #define WINDOW_WIDTH 300
29 #define WINDOW_HEIGHT -1
30
31 static GtkWidget *entry = NULL;
32 static GtkWidget *button = NULL;
33 static GtkWidget *socket = NULL;
34
35 static void
36 _button_clicked_cb (GtkButton *button, gpointer data)
37 {
38   AtkObject *socketAxObject = NULL;
39   gchar *text_id = NULL;
40
41   text_id = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
42
43   if (text_id && text_id[0] != '\0')
44     {
45       socketAxObject = gtk_widget_get_accessible (socket);
46
47       if (ATK_IS_SOCKET (socketAxObject))
48         {
49           g_print ("[SOCKET] Embedding object with ID %s\n", text_id);
50           atk_socket_embed (ATK_SOCKET (socketAxObject), text_id);
51           g_print ("[SOCKET] Done\n");
52         }
53       else
54         g_print ("Not embedding anything: Not an instance of AtkSocket\n");
55     }
56   else
57     g_print ("Not embedding: you need to provide an ID\n");
58
59   g_free (text_id);
60 }
61
62 static void
63 _create_widgets (GtkWidget *window)
64 {
65   GtkWidget *vbox = NULL;
66
67   vbox = gtk_vbox_new (FALSE, 0);
68
69   /* Label + entry */
70   entry = gtk_entry_new ();
71   gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 6);
72
73   button = gtk_button_new_with_label ("Connect to plug");
74   g_signal_connect (button, "clicked", G_CALLBACK (_button_clicked_cb), NULL);
75   gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 6);
76
77   /* Our socket accessible */
78   socket = ta_socket_label_new ("Socket accessible goes here");
79   gtk_box_pack_start (GTK_BOX (vbox), socket, FALSE, FALSE, 6);
80
81   gtk_container_add (GTK_CONTAINER (window), vbox);
82 }
83
84 int
85 main (int argc, char**argv)
86 {
87   GtkWidget *window = NULL;
88
89   gtk_init (&argc, &argv);
90
91   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
92   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
93
94   ta_socket_accessible_factory_initialize ();
95
96   _create_widgets (window);
97
98   gtk_window_set_default_size (GTK_WINDOW (window),
99                                WINDOW_WIDTH, WINDOW_HEIGHT);
100   gtk_widget_show_all (window);
101   gtk_main ();
102 }