|
Packit |
98cdb6 |
#undef GDK_DISABLE_DEPRECATED
|
|
Packit |
98cdb6 |
#include <gtk/gtk.h>
|
|
Packit |
98cdb6 |
#ifdef GDK_WINDOWING_X11
|
|
Packit |
98cdb6 |
#include <X11/Xlib.h>
|
|
Packit |
98cdb6 |
#endif
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static GtkWidget *darea;
|
|
Packit |
98cdb6 |
static GtkTreeStore *window_store = NULL;
|
|
Packit |
98cdb6 |
static GtkWidget *treeview;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void update_store (void);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static GtkWidget *main_window;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static gboolean
|
|
Packit |
98cdb6 |
window_has_impl (GdkWindow *window)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkWindowObject *w;
|
|
Packit |
98cdb6 |
w = (GdkWindowObject *)window;
|
|
Packit |
98cdb6 |
return w->parent == NULL || w->parent->impl != w->impl;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
GdkWindow *
|
|
Packit |
98cdb6 |
create_window (GdkWindow *parent,
|
|
Packit |
98cdb6 |
int x, int y, int w, int h,
|
|
Packit |
98cdb6 |
GdkColor *color)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkWindowAttr attributes;
|
|
Packit |
98cdb6 |
gint attributes_mask;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
GdkColor *bg;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
attributes.x = x;
|
|
Packit |
98cdb6 |
attributes.y = y;
|
|
Packit |
98cdb6 |
attributes.width = w;
|
|
Packit |
98cdb6 |
attributes.height = h;
|
|
Packit |
98cdb6 |
attributes.window_type = GDK_WINDOW_CHILD;
|
|
Packit |
98cdb6 |
attributes.event_mask = GDK_STRUCTURE_MASK
|
|
Packit |
98cdb6 |
| GDK_BUTTON_MOTION_MASK
|
|
Packit |
98cdb6 |
| GDK_BUTTON_PRESS_MASK
|
|
Packit |
98cdb6 |
| GDK_BUTTON_RELEASE_MASK
|
|
Packit |
98cdb6 |
| GDK_EXPOSURE_MASK
|
|
Packit |
98cdb6 |
| GDK_ENTER_NOTIFY_MASK
|
|
Packit |
98cdb6 |
| GDK_LEAVE_NOTIFY_MASK;
|
|
Packit |
98cdb6 |
attributes.wclass = GDK_INPUT_OUTPUT;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
attributes_mask = GDK_WA_X | GDK_WA_Y;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
window = gdk_window_new (parent, &attributes, attributes_mask);
|
|
Packit |
98cdb6 |
gdk_window_set_user_data (window, darea);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
bg = g_new (GdkColor, 1);
|
|
Packit |
98cdb6 |
if (color)
|
|
Packit |
98cdb6 |
*bg = *color;
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
bg->red = g_random_int_range (0, 0xffff);
|
|
Packit |
98cdb6 |
bg->blue = g_random_int_range (0, 0xffff);
|
|
Packit |
98cdb6 |
bg->green = g_random_int_range (0, 0xffff);;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_rgb_find_color (gtk_widget_get_colormap (darea), bg);
|
|
Packit |
98cdb6 |
gdk_window_set_background (window, bg);
|
|
Packit |
98cdb6 |
g_object_set_data_full (G_OBJECT (window), "color", bg, g_free);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_show (window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return window;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
add_window_cb (GtkTreeModel *model,
|
|
Packit |
98cdb6 |
GtkTreePath *path,
|
|
Packit |
98cdb6 |
GtkTreeIter *iter,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList **selected = data;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_model_get (GTK_TREE_MODEL (window_store),
|
|
Packit |
98cdb6 |
iter,
|
|
Packit |
98cdb6 |
0, &window,
|
|
Packit |
98cdb6 |
-1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
*selected = g_list_prepend (*selected, window);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static GList *
|
|
Packit |
98cdb6 |
get_selected_windows (void)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeSelection *sel;
|
|
Packit |
98cdb6 |
GList *selected;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = NULL;
|
|
Packit |
98cdb6 |
gtk_tree_selection_selected_foreach (sel, add_window_cb, &selected);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return selected;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static gboolean
|
|
Packit |
98cdb6 |
find_window_helper (GtkTreeModel *model,
|
|
Packit |
98cdb6 |
GdkWindow *window,
|
|
Packit |
98cdb6 |
GtkTreeIter *iter,
|
|
Packit |
98cdb6 |
GtkTreeIter *selected_iter)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeIter child_iter;
|
|
Packit |
98cdb6 |
GdkWindow *w;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
do
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
gtk_tree_model_get (model, iter,
|
|
Packit |
98cdb6 |
0, &w,
|
|
Packit |
98cdb6 |
-1);
|
|
Packit |
98cdb6 |
if (w == window)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
*selected_iter = *iter;
|
|
Packit |
98cdb6 |
return TRUE;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (gtk_tree_model_iter_children (model,
|
|
Packit |
98cdb6 |
&child_iter,
|
|
Packit |
98cdb6 |
iter))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (find_window_helper (model, window, &child_iter, selected_iter))
|
|
Packit |
98cdb6 |
return TRUE;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
} while (gtk_tree_model_iter_next (model, iter));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return FALSE;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static gboolean
|
|
Packit |
98cdb6 |
find_window (GdkWindow *window,
|
|
Packit |
98cdb6 |
GtkTreeIter *window_iter)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeIter iter;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (window_store), &iter))
|
|
Packit |
98cdb6 |
return FALSE;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return find_window_helper (GTK_TREE_MODEL (window_store),
|
|
Packit |
98cdb6 |
window,
|
|
Packit |
98cdb6 |
&iter,
|
|
Packit |
98cdb6 |
window_iter);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
toggle_selection_window (GdkWindow *window)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeSelection *selection;
|
|
Packit |
98cdb6 |
GtkTreeIter iter;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (window != NULL &&
|
|
Packit |
98cdb6 |
find_window (window, &iter))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (gtk_tree_selection_iter_is_selected (selection, &iter))
|
|
Packit |
98cdb6 |
gtk_tree_selection_unselect_iter (selection, &iter);
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
gtk_tree_selection_select_iter (selection, &iter);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
unselect_windows (void)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeSelection *selection;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_selection_unselect_all (selection);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
select_window (GdkWindow *window)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeSelection *selection;
|
|
Packit |
98cdb6 |
GtkTreeIter iter;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (window != NULL &&
|
|
Packit |
98cdb6 |
find_window (window, &iter))
|
|
Packit |
98cdb6 |
gtk_tree_selection_select_iter (selection, &iter);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
select_windows (GList *windows)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeSelection *selection;
|
|
Packit |
98cdb6 |
GtkTreeIter iter;
|
|
Packit |
98cdb6 |
GList *l;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
|
Packit |
98cdb6 |
gtk_tree_selection_unselect_all (selection);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = windows; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (find_window (l->data, &iter))
|
|
Packit |
98cdb6 |
gtk_tree_selection_select_iter (selection, &iter);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
add_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkWindow *parent;
|
|
Packit |
98cdb6 |
GList *l;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
l = get_selected_windows ();
|
|
Packit |
98cdb6 |
if (l != NULL)
|
|
Packit |
98cdb6 |
parent = l->data;
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
parent = darea->window;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (l);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
create_window (parent, 10, 10, 100, 100, NULL);
|
|
Packit |
98cdb6 |
update_store ();
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
draw_drawable_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkGC *gc;
|
|
Packit |
98cdb6 |
gc = gdk_gc_new (darea->window);
|
|
Packit |
98cdb6 |
gdk_draw_drawable (darea->window,
|
|
Packit |
98cdb6 |
gc,
|
|
Packit |
98cdb6 |
darea->window,
|
|
Packit |
98cdb6 |
-15, -15,
|
|
Packit |
98cdb6 |
40, 70,
|
|
Packit |
98cdb6 |
100, 100);
|
|
Packit |
98cdb6 |
g_object_unref (gc);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
remove_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *l, *selected;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
gdk_window_destroy (l->data);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
update_store ();
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void save_children (GString *s, GdkWindow *window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
save_window (GString *s,
|
|
Packit |
98cdb6 |
GdkWindow *window)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
gint x, y, w, h;
|
|
Packit |
98cdb6 |
GdkColor *color;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_get_position (window, &x, &y);
|
|
Packit |
98cdb6 |
gdk_drawable_get_size (GDK_DRAWABLE (window), &w, &h);
|
|
Packit |
98cdb6 |
color = g_object_get_data (G_OBJECT (window), "color");
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_string_append_printf (s, "%d,%d %dx%d (%d,%d,%d) %d %d\n",
|
|
Packit |
98cdb6 |
x, y, w, h,
|
|
Packit |
98cdb6 |
color->red, color->green, color->blue,
|
|
Packit |
98cdb6 |
window_has_impl (window),
|
|
Packit |
98cdb6 |
g_list_length (gdk_window_peek_children (window)));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
save_children (s, window);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
save_children (GString *s,
|
|
Packit |
98cdb6 |
GdkWindow *window)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *l;
|
|
Packit |
98cdb6 |
GdkWindow *child;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = g_list_reverse (gdk_window_peek_children (window));
|
|
Packit |
98cdb6 |
l != NULL;
|
|
Packit |
98cdb6 |
l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
child = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
save_window (s, child);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
save_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GString *s;
|
|
Packit |
98cdb6 |
GtkWidget *dialog;
|
|
Packit |
98cdb6 |
GFile *file;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
s = g_string_new ("");
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
save_children (s, darea->window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
dialog = gtk_file_chooser_dialog_new ("Filename for window data",
|
|
Packit |
98cdb6 |
NULL,
|
|
Packit |
98cdb6 |
GTK_FILE_CHOOSER_ACTION_SAVE,
|
|
Packit |
98cdb6 |
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
Packit |
98cdb6 |
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_file_replace_contents (file,
|
|
Packit |
98cdb6 |
s->str, s->len,
|
|
Packit |
98cdb6 |
NULL, FALSE,
|
|
Packit |
98cdb6 |
0, NULL, NULL, NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_object_unref (file);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_widget_destroy (dialog);
|
|
Packit |
98cdb6 |
g_string_free (s, TRUE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
destroy_children (GdkWindow *window)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *l;
|
|
Packit |
98cdb6 |
GdkWindow *child;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = gdk_window_peek_children (window);
|
|
Packit |
98cdb6 |
l != NULL;
|
|
Packit |
98cdb6 |
l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
child = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
destroy_children (child);
|
|
Packit |
98cdb6 |
gdk_window_destroy (child);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static char **
|
|
Packit |
98cdb6 |
parse_window (GdkWindow *parent, char **lines)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
int x, y, w, h, r, g, b, native, n_children;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
GdkColor color;
|
|
Packit |
98cdb6 |
int i;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (*lines == NULL)
|
|
Packit |
98cdb6 |
return lines;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (sscanf(*lines, "%d,%d %dx%d (%d,%d,%d) %d %d",
|
|
Packit |
98cdb6 |
&x, &y, &w, &h, &r, &g, &b, &native, &n_children) == 9)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
lines++;
|
|
Packit |
98cdb6 |
color.red = r;
|
|
Packit |
98cdb6 |
color.green = g;
|
|
Packit |
98cdb6 |
color.blue = b;
|
|
Packit |
98cdb6 |
window = create_window (parent, x, y, w, h, &color;;
|
|
Packit |
98cdb6 |
if (native)
|
|
Packit |
98cdb6 |
gdk_window_ensure_native (window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (i = 0; i < n_children; i++)
|
|
Packit |
98cdb6 |
lines = parse_window (window, lines);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
lines++;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return lines;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
load_file (GFile *file)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
char *data;
|
|
Packit |
98cdb6 |
char **lines, **l;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (g_file_load_contents (file, NULL, &data, NULL, NULL, NULL))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
destroy_children (darea->window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
lines = g_strsplit (data, "\n", -1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
l = lines;
|
|
Packit |
98cdb6 |
while (*l != NULL)
|
|
Packit |
98cdb6 |
l = parse_window (darea->window, l);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
update_store ();
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
move_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
GtkDirectionType direction;
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
gint x, y;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
direction = GPOINTER_TO_INT (data);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_get_position (window, &x, &y);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
switch (direction) {
|
|
Packit |
98cdb6 |
case GTK_DIR_UP:
|
|
Packit |
98cdb6 |
y -= 10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
case GTK_DIR_DOWN:
|
|
Packit |
98cdb6 |
y += 10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
case GTK_DIR_LEFT:
|
|
Packit |
98cdb6 |
x -= 10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
case GTK_DIR_RIGHT:
|
|
Packit |
98cdb6 |
x += 10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
default:
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_move (window, x, y);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
manual_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
int x, y, w, h;
|
|
Packit |
98cdb6 |
GtkWidget *dialog, *table, *label, *xspin, *yspin, *wspin, *hspin;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (selected == NULL)
|
|
Packit |
98cdb6 |
return;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_get_position (selected->data, &x, &y);
|
|
Packit |
98cdb6 |
gdk_drawable_get_size (selected->data, &w, &h);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
dialog = gtk_dialog_new_with_buttons ("Select new position and size",
|
|
Packit |
98cdb6 |
GTK_WINDOW (main_window),
|
|
Packit |
98cdb6 |
GTK_DIALOG_MODAL,
|
|
Packit |
98cdb6 |
GTK_STOCK_OK, GTK_RESPONSE_OK,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
table = gtk_table_new (2, 4, TRUE);
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
|
|
Packit |
98cdb6 |
table,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
2);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
label = gtk_label_new ("x:");
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
label,
|
|
Packit |
98cdb6 |
0, 1,
|
|
Packit |
98cdb6 |
0, 1);
|
|
Packit |
98cdb6 |
label = gtk_label_new ("y:");
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
label,
|
|
Packit |
98cdb6 |
0, 1,
|
|
Packit |
98cdb6 |
1, 2);
|
|
Packit |
98cdb6 |
label = gtk_label_new ("width:");
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
label,
|
|
Packit |
98cdb6 |
0, 1,
|
|
Packit |
98cdb6 |
2, 3);
|
|
Packit |
98cdb6 |
label = gtk_label_new ("height:");
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
label,
|
|
Packit |
98cdb6 |
0, 1,
|
|
Packit |
98cdb6 |
3, 4);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
xspin = gtk_spin_button_new_with_range (G_MININT, G_MAXINT, 1);
|
|
Packit |
98cdb6 |
gtk_spin_button_set_value (GTK_SPIN_BUTTON (xspin), x);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
xspin,
|
|
Packit |
98cdb6 |
1, 2,
|
|
Packit |
98cdb6 |
0, 1);
|
|
Packit |
98cdb6 |
yspin = gtk_spin_button_new_with_range (G_MININT, G_MAXINT, 1);
|
|
Packit |
98cdb6 |
gtk_spin_button_set_value (GTK_SPIN_BUTTON (yspin), y);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
yspin,
|
|
Packit |
98cdb6 |
1, 2,
|
|
Packit |
98cdb6 |
1, 2);
|
|
Packit |
98cdb6 |
wspin = gtk_spin_button_new_with_range (G_MININT, G_MAXINT, 1);
|
|
Packit |
98cdb6 |
gtk_spin_button_set_value (GTK_SPIN_BUTTON (wspin), w);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
wspin,
|
|
Packit |
98cdb6 |
1, 2,
|
|
Packit |
98cdb6 |
2, 3);
|
|
Packit |
98cdb6 |
hspin = gtk_spin_button_new_with_range (G_MININT, G_MAXINT, 1);
|
|
Packit |
98cdb6 |
gtk_spin_button_set_value (GTK_SPIN_BUTTON (hspin), h);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
hspin,
|
|
Packit |
98cdb6 |
1, 2,
|
|
Packit |
98cdb6 |
3, 4);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_widget_show_all (dialog);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
x = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (xspin));
|
|
Packit |
98cdb6 |
y = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (yspin));
|
|
Packit |
98cdb6 |
w = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (wspin));
|
|
Packit |
98cdb6 |
h = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (hspin));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_widget_destroy (dialog);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_move_resize (window, x, y, w, h);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
restack_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *selected;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (g_list_length (selected) != 2)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
g_warning ("select two windows");
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_restack (selected->data,
|
|
Packit |
98cdb6 |
selected->next->data,
|
|
Packit |
98cdb6 |
GPOINTER_TO_INT (data));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
update_store ();
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
scroll_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
GtkDirectionType direction;
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
gint dx, dy;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
direction = GPOINTER_TO_INT (data);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
dx = 0; dy = 0;
|
|
Packit |
98cdb6 |
switch (direction) {
|
|
Packit |
98cdb6 |
case GTK_DIR_UP:
|
|
Packit |
98cdb6 |
dy = 10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
case GTK_DIR_DOWN:
|
|
Packit |
98cdb6 |
dy = -10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
case GTK_DIR_LEFT:
|
|
Packit |
98cdb6 |
dx = 10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
case GTK_DIR_RIGHT:
|
|
Packit |
98cdb6 |
dx = -10;
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
default:
|
|
Packit |
98cdb6 |
break;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_scroll (window, dx, dy);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
raise_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_raise (window);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
update_store ();
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
lower_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_lower (window);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
update_store ();
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
smaller_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
int w, h;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_drawable_get_size (GDK_DRAWABLE (window), &w, &h);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
w -= 10;
|
|
Packit |
98cdb6 |
h -= 10;
|
|
Packit |
98cdb6 |
if (w < 1)
|
|
Packit |
98cdb6 |
w = 1;
|
|
Packit |
98cdb6 |
if (h < 1)
|
|
Packit |
98cdb6 |
h = 1;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_resize (window, w, h);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
larger_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
int w, h;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_drawable_get_size (GDK_DRAWABLE (window), &w, &h);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
w += 10;
|
|
Packit |
98cdb6 |
h += 10;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_resize (window, w, h);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
native_window_clicked (GtkWidget *button,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *selected, *l;
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = selected; l != NULL; l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
window = l->data;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gdk_window_ensure_native (window);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
update_store ();
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static gboolean
|
|
Packit |
98cdb6 |
darea_button_release_event (GtkWidget *widget,
|
|
Packit |
98cdb6 |
GdkEventButton *event)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if ((event->state & GDK_CONTROL_MASK) != 0)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
toggle_selection_window (event->window);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
unselect_windows ();
|
|
Packit |
98cdb6 |
select_window (event->window);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return TRUE;
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
render_window_cell (GtkTreeViewColumn *tree_column,
|
|
Packit |
98cdb6 |
GtkCellRenderer *cell,
|
|
Packit |
98cdb6 |
GtkTreeModel *tree_model,
|
|
Packit |
98cdb6 |
GtkTreeIter *iter,
|
|
Packit |
98cdb6 |
gpointer data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GdkWindow *window;
|
|
Packit |
98cdb6 |
char *name;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_model_get (GTK_TREE_MODEL (window_store),
|
|
Packit |
98cdb6 |
iter,
|
|
Packit |
98cdb6 |
0, &window,
|
|
Packit |
98cdb6 |
-1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (window_has_impl (window))
|
|
Packit |
98cdb6 |
name = g_strdup_printf ("%p (native)", window);
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
name = g_strdup_printf ("%p", window);
|
|
Packit |
98cdb6 |
g_object_set (cell,
|
|
Packit |
98cdb6 |
"text", name,
|
|
Packit |
98cdb6 |
"background-gdk", &((GdkWindowObject *)window)->bg_color,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
add_children (GtkTreeStore *store,
|
|
Packit |
98cdb6 |
GdkWindow *window,
|
|
Packit |
98cdb6 |
GtkTreeIter *window_iter)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *l;
|
|
Packit |
98cdb6 |
GtkTreeIter child_iter;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (l = gdk_window_peek_children (window);
|
|
Packit |
98cdb6 |
l != NULL;
|
|
Packit |
98cdb6 |
l = l->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
gtk_tree_store_append (store, &child_iter, window_iter);
|
|
Packit |
98cdb6 |
gtk_tree_store_set (store, &child_iter,
|
|
Packit |
98cdb6 |
0, l->data,
|
|
Packit |
98cdb6 |
-1);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
add_children (store, l->data, &child_iter);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
update_store (void)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GList *selected;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
selected = get_selected_windows ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_store_clear (window_store);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
add_children (window_store, darea->window, NULL);
|
|
Packit |
98cdb6 |
gtk_tree_view_expand_all (GTK_TREE_VIEW (treeview));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
select_windows (selected);
|
|
Packit |
98cdb6 |
g_list_free (selected);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
int
|
|
Packit |
98cdb6 |
main (int argc, char **argv)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkWidget *window, *vbox, *hbox, *frame;
|
|
Packit |
98cdb6 |
GtkWidget *button, *scrolled, *table;
|
|
Packit |
98cdb6 |
GtkTreeViewColumn *column;
|
|
Packit |
98cdb6 |
GtkCellRenderer *renderer;
|
|
Packit |
98cdb6 |
GdkColor black = {0};
|
|
Packit |
98cdb6 |
GFile *file;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_init (&argc, &argv);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
main_window = window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
Packit |
98cdb6 |
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_signal_connect (G_OBJECT (window), "delete-event", gtk_main_quit, NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
hbox = gtk_hbox_new (FALSE, 5);
|
|
Packit |
98cdb6 |
gtk_container_add (GTK_CONTAINER (window), hbox);
|
|
Packit |
98cdb6 |
gtk_widget_show (hbox);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
frame = gtk_frame_new ("GdkWindows");
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (hbox),
|
|
Packit |
98cdb6 |
frame,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
5);
|
|
Packit |
98cdb6 |
gtk_widget_show (frame);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
darea = gtk_drawing_area_new ();
|
|
Packit |
98cdb6 |
/*gtk_widget_set_double_buffered (darea, FALSE);*/
|
|
Packit |
98cdb6 |
gtk_widget_add_events (darea, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
|
Packit |
98cdb6 |
gtk_widget_set_size_request (darea, 500, 500);
|
|
Packit |
98cdb6 |
g_signal_connect (darea, "button_release_event",
|
|
Packit |
98cdb6 |
G_CALLBACK (darea_button_release_event),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_container_add (GTK_CONTAINER (frame), darea);
|
|
Packit |
98cdb6 |
gtk_widget_realize (darea);
|
|
Packit |
98cdb6 |
gtk_widget_show (darea);
|
|
Packit |
98cdb6 |
gtk_widget_modify_bg (darea, GTK_STATE_NORMAL,
|
|
Packit |
98cdb6 |
&black);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
vbox = gtk_vbox_new (FALSE, 5);
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (hbox),
|
|
Packit |
98cdb6 |
vbox,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
5);
|
|
Packit |
98cdb6 |
gtk_widget_show (vbox);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
window_store = gtk_tree_store_new (1, GDK_TYPE_WINDOW);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (window_store));
|
|
Packit |
98cdb6 |
gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),
|
|
Packit |
98cdb6 |
GTK_SELECTION_MULTIPLE);
|
|
Packit |
98cdb6 |
column = gtk_tree_view_column_new ();
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_title (column, "Window");
|
|
Packit |
98cdb6 |
renderer = gtk_cell_renderer_text_new ();
|
|
Packit |
98cdb6 |
gtk_tree_view_column_pack_start (column, renderer, TRUE);
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_cell_data_func (column,
|
|
Packit |
98cdb6 |
renderer,
|
|
Packit |
98cdb6 |
render_window_cell,
|
|
Packit |
98cdb6 |
NULL, NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
scrolled = gtk_scrolled_window_new (NULL, NULL);
|
|
Packit |
98cdb6 |
gtk_widget_set_size_request (scrolled, 200, 400);
|
|
Packit |
98cdb6 |
gtk_container_add (GTK_CONTAINER (scrolled), treeview);
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox),
|
|
Packit |
98cdb6 |
scrolled,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
5);
|
|
Packit |
98cdb6 |
gtk_widget_show (scrolled);
|
|
Packit |
98cdb6 |
gtk_widget_show (treeview);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
table = gtk_table_new (5, 4, TRUE);
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox),
|
|
Packit |
98cdb6 |
table,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
2);
|
|
Packit |
98cdb6 |
gtk_widget_show (table);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new ();
|
|
Packit |
98cdb6 |
gtk_button_set_image (GTK_BUTTON (button),
|
|
Packit |
98cdb6 |
gtk_image_new_from_stock (GTK_STOCK_GO_BACK,
|
|
Packit |
98cdb6 |
GTK_ICON_SIZE_BUTTON));
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (move_window_clicked),
|
|
Packit |
98cdb6 |
GINT_TO_POINTER (GTK_DIR_LEFT));
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
0, 1,
|
|
Packit |
98cdb6 |
1, 2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new ();
|
|
Packit |
98cdb6 |
gtk_button_set_image (GTK_BUTTON (button),
|
|
Packit |
98cdb6 |
gtk_image_new_from_stock (GTK_STOCK_GO_UP,
|
|
Packit |
98cdb6 |
GTK_ICON_SIZE_BUTTON));
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (move_window_clicked),
|
|
Packit |
98cdb6 |
GINT_TO_POINTER (GTK_DIR_UP));
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
1, 2,
|
|
Packit |
98cdb6 |
0, 1);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new ();
|
|
Packit |
98cdb6 |
gtk_button_set_image (GTK_BUTTON (button),
|
|
Packit |
98cdb6 |
gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD,
|
|
Packit |
98cdb6 |
GTK_ICON_SIZE_BUTTON));
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (move_window_clicked),
|
|
Packit |
98cdb6 |
GINT_TO_POINTER (GTK_DIR_RIGHT));
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
2, 3,
|
|
Packit |
98cdb6 |
1, 2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new ();
|
|
Packit |
98cdb6 |
gtk_button_set_image (GTK_BUTTON (button),
|
|
Packit |
98cdb6 |
gtk_image_new_from_stock (GTK_STOCK_GO_DOWN,
|
|
Packit |
98cdb6 |
GTK_ICON_SIZE_BUTTON));
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (move_window_clicked),
|
|
Packit |
98cdb6 |
GINT_TO_POINTER (GTK_DIR_DOWN));
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
1, 2,
|
|
Packit |
98cdb6 |
2, 3);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Raise");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (raise_window_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
0, 1,
|
|
Packit |
98cdb6 |
0, 1);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Lower");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (lower_window_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
0, 1,
|
|
Packit |
98cdb6 |
2, 3);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Smaller");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (smaller_window_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
2, 3,
|
|
Packit |
98cdb6 |
0, 1);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Larger");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (larger_window_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
2, 3,
|
|
Packit |
98cdb6 |
2, 3);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Native");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (native_window_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
1, 2,
|
|
Packit |
98cdb6 |
1, 2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("scroll");
|
|
Packit |
98cdb6 |
gtk_button_set_image (GTK_BUTTON (button),
|
|
Packit |
98cdb6 |
gtk_image_new_from_stock (GTK_STOCK_GO_UP,
|
|
Packit |
98cdb6 |
GTK_ICON_SIZE_BUTTON));
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (scroll_window_clicked),
|
|
Packit |
98cdb6 |
GINT_TO_POINTER (GTK_DIR_UP));
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
3, 4,
|
|
Packit |
98cdb6 |
0, 1);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("scroll");
|
|
Packit |
98cdb6 |
gtk_button_set_image (GTK_BUTTON (button),
|
|
Packit |
98cdb6 |
gtk_image_new_from_stock (GTK_STOCK_GO_DOWN,
|
|
Packit |
98cdb6 |
GTK_ICON_SIZE_BUTTON));
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (scroll_window_clicked),
|
|
Packit |
98cdb6 |
GINT_TO_POINTER (GTK_DIR_DOWN));
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
3, 4,
|
|
Packit |
98cdb6 |
1, 2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Manual");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (manual_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
3, 4,
|
|
Packit |
98cdb6 |
2, 3);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Restack above");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (restack_clicked),
|
|
Packit |
98cdb6 |
GINT_TO_POINTER (1));
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
2, 3,
|
|
Packit |
98cdb6 |
3, 4);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Restack below");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (restack_clicked),
|
|
Packit |
98cdb6 |
0);
|
|
Packit |
98cdb6 |
gtk_table_attach_defaults (GTK_TABLE (table),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
3, 4,
|
|
Packit |
98cdb6 |
3, 4);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("draw drawable");
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (draw_drawable_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Add window");
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (add_window_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Remove window");
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (remove_window_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
button = gtk_button_new_with_label ("Save");
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox),
|
|
Packit |
98cdb6 |
button,
|
|
Packit |
98cdb6 |
FALSE, FALSE,
|
|
Packit |
98cdb6 |
2);
|
|
Packit |
98cdb6 |
gtk_widget_show (button);
|
|
Packit |
98cdb6 |
g_signal_connect (button, "clicked",
|
|
Packit |
98cdb6 |
G_CALLBACK (save_clicked),
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_widget_show (window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (argc == 2)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
file = g_file_new_for_commandline_arg (argv[1]);
|
|
Packit |
98cdb6 |
load_file (file);
|
|
Packit |
98cdb6 |
g_object_unref (file);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_main ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return 0;
|
|
Packit |
98cdb6 |
}
|