Author: rpmcruz
Date: Thu Sep 11 19:36:05 2008
New Revision: 51069
URL: http://svn.opensuse.org/viewcvs/yast?rev=51069&view=rev
Log:
* src/YGDialog.h/cc: added support for YDialog::highlight() which
coupled with the new Spy debugger allows one to nicely travel through
the widgets tree. (checkout with Ctrl+Alt+Shift+Y)
* src/YGUI.cc: coupled dumpGtk and dumpYast trees into the same
dialog. (ctrl+alt+shift+T) Will eventually be obsolete by the new spy
tool.
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/YGDialog.cc
trunk/gtk/src/YGDialog.h
trunk/gtk/src/YGUI.cc
trunk/gtk/src/YGUI.h
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=51069&r1=51068&r2=51069&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Thu Sep 11 19:36:05 2008
@@ -1,3 +1,19 @@
+2008-09-11 Ricardo Cruz
+
+ * src/YGDialog.h/cc: added support for YDialog::highlight() which
+ coupled with the new Spy debugger allows one to nicely travel through
+ the widgets tree. (checkout with Ctrl+Alt+Shift+Y)
+
+ * src/YGUI.cc: coupled dumpGtk and dumpYast trees into the same
+ dialog. (ctrl+alt+shift+T) Will eventually be obsolete by the new spy
+ tool.
+
+2008-09-11 jsrain
+
+ * src/YGPackageSelector.cc: fixed a typo.
+
+ * release.
+
2008-09-10 Ricardo Cruz
* src/YGPackageSelector.cc: fixed context menu for objects like Language
Modified: trunk/gtk/src/YGDialog.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGDialog.cc?rev=51069&r1=51068&r2=51069&view=diff
==============================================================================
--- trunk/gtk/src/YGDialog.cc (original)
+++ trunk/gtk/src/YGDialog.cc Thu Sep 11 19:36:05 2008
@@ -1,9 +1,11 @@
/********************************************************************
* YaST2-GTK - http://en.opensuse.org/YaST2-GTK *
********************************************************************/
+
#include
#include "YGUI.h"
#include "YGDialog.h"
+#include
#include
#include // easter
@@ -223,8 +225,7 @@
system ("/usr/bin/xterm &");
return TRUE;
case GDK_T:
- dumpYastTree (pThis->getChild());
- dumpGtkTree (pThis->m_widget);
+ dumpTree (pThis->getChild());
return TRUE;
case GDK_H:
dumpYastHtml (pThis->getChild());
@@ -239,6 +240,11 @@
explode_timeout = 0;
}
return TRUE;
+ case GDK_Y:
+ yuiMilestone() << "Opening dialog spy" << endl;
+ YDialogSpy::showDialogSpy();
+ //normalCursor();
+ break;
default:
break;
}
@@ -403,6 +409,76 @@
}
}
+void YGDialog::highlight (YWidget *ywidget)
+{
+ struct inner {
+ static gboolean expose_highlight_cb (GtkWidget *widget,
+ GdkEventExpose *event)
+ {
+ GtkAllocation *alloc = &widget->allocation;
+ int x = alloc->x, y = alloc->y, w = alloc->width, h = alloc->height;
+
+ cairo_t *cr = gdk_cairo_create (widget->window);
+ cairo_rectangle (cr, x, y, w, h);
+ cairo_set_source_rgb (cr, (0xff/255.0), (0x88)/255.0, 0);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+ return FALSE;
+ }
+
+ static bool hasWindow (GtkWidget *widget)
+ {
+ if (!GTK_WIDGET_NO_WINDOW (widget))
+ return true;
+ // widgets like GtkButton add their windows to parent's
+ for (GList *children = gdk_window_peek_children (widget->window);
+ children; children = children->next) {
+ GdkWindow *child = (GdkWindow *) children->data;
+ gpointer data;
+ gdk_window_get_user_data (child, &data);
+ if ((GtkWidget *) data == widget)
+ return true;
+ }
+ return false;
+ }
+
+ };
+ static YWidget *previousWidget = NULL;
+ if (previousWidget && previousWidget->isValid()) {
+ YGWidget *prev = YGWidget::get (previousWidget);
+ if (prev) {
+ GtkWidget *widget = prev->getWidget();
+ if (inner::hasWindow (widget)) {
+ gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, NULL);
+ gtk_widget_modify_base (widget, GTK_STATE_NORMAL, NULL);
+ }
+ else {
+ g_signal_handlers_disconnect_by_func (widget,
+ (gpointer) inner::expose_highlight_cb, NULL);
+ gtk_widget_queue_draw (widget);
+ }
+ }
+ }
+ if (ywidget) {
+ YGWidget *ygwidget = YGWidget::get (ywidget);
+ if (ygwidget) {
+ GtkWidget *widget = ygwidget->getWidget();
+ if (inner::hasWindow (widget)) {
+ GdkColor bg_color = { 0, 0xffff, 0xaaaa, 0 };
+ GdkColor base_color = { 0, 0xffff, 0xeeee, 0 };
+ gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &bg_color);
+ gtk_widget_modify_base (widget, GTK_STATE_NORMAL, &base_color);
+ }
+ else {
+ g_signal_connect (G_OBJECT (widget), "expose-event",
+ G_CALLBACK (inner::expose_highlight_cb), NULL);
+ gtk_widget_queue_draw (widget);
+ }
+ }
+ }
+ previousWidget = ywidget;
+}
+
YDialog *YGWidgetFactory::createDialog (YDialogType dialogType, YDialogColorMode colorMode)
{
IMPL
Modified: trunk/gtk/src/YGDialog.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGDialog.h?rev=51069&r1=51068&r2=51069&view=diff
==============================================================================
--- trunk/gtk/src/YGDialog.h (original)
+++ trunk/gtk/src/YGDialog.h Thu Sep 11 19:36:05 2008
@@ -38,6 +38,8 @@
virtual YEvent *waitForEventInternal (int timeout_millisec);
virtual YEvent *pollEventInternal();
+ virtual void highlight (YWidget * child);
+
YGWIDGET_IMPL_CHILD_ADDED (m_containee)
YGWIDGET_IMPL_CHILD_REMOVED (m_containee)
};
Modified: trunk/gtk/src/YGUI.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGUI.cc?rev=51069&r1=51068&r2=51069&view=diff
==============================================================================
--- trunk/gtk/src/YGUI.cc (original)
+++ trunk/gtk/src/YGUI.cc Thu Sep 11 19:36:05 2008
@@ -580,40 +580,56 @@
//** debug dialogs
-static GtkTreeView *debug_dialog_create (const char *title, GtkTreeStore *store,
- GCallback response_cb, void *response_data)
-{
- GtkWidget *dialog = gtk_dialog_new_with_buttons (title, NULL,
- GtkDialogFlags (GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_REFRESH, 1,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
- gtk_window_set_default_size (GTK_WINDOW (dialog), -1, 400);
- g_signal_connect (G_OBJECT (dialog), "response", response_cb, response_data);
-
- GtkWidget *view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
- gtk_tree_view_set_enable_tree_lines (GTK_TREE_VIEW (view), TRUE);
-
- GtkWidget *scroll_win = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll_win),
- GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_win),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+//#define SHOW_YAST_VALID_COL
- gtk_container_add (GTK_CONTAINER (scroll_win), view);
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), scroll_win);
-
- g_object_set_data (G_OBJECT (dialog), "view", view);
- g_object_set_data (G_OBJECT (dialog), "store", store);
-
- gtk_widget_show_all (dialog);
-
- return GTK_TREE_VIEW (view);
-}
-
-//#define IS_VALID_COL
-void dumpYastTree (YWidget *widget)
+void dumpTree (YWidget *ywidget)
{
- IMPL
struct inner {
+ static GtkWidget *createYastView (GtkWidget *dialog, YWidget *ywidget)
+ {
+ int cols = 4;
+ #ifdef SHOW_YAST_VALID_COL
+ cols++;
+ #endif
+
+ GtkTreeStore *store;
+ store = gtk_tree_store_new (cols,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING
+ #ifdef SHOW_VALID_COL
+ , G_TYPE_BOOLEAN
+ #endif
+ );
+ GtkWidget *widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
+ GtkTreeView *view = GTK_TREE_VIEW (widget);
+ gtk_tree_view_set_enable_tree_lines (view, TRUE);
+ g_object_unref (G_OBJECT (store));
+
+ g_object_set_data (G_OBJECT (dialog), "yast-view", view);
+ g_object_set_data (G_OBJECT (dialog), "yast-store", store);
+
+ gtk_tree_view_append_column (view,
+ gtk_tree_view_column_new_with_attributes ("Type",
+ gtk_cell_renderer_text_new(), "text", 0, NULL));
+ gtk_tree_view_append_column (view,
+ gtk_tree_view_column_new_with_attributes ("Label",
+ gtk_cell_renderer_text_new(), "text", 1, NULL));
+ gtk_tree_view_column_set_expand (gtk_tree_view_get_column (
+ GTK_TREE_VIEW (view), 1), TRUE);
+ gtk_tree_view_append_column (view,
+ gtk_tree_view_column_new_with_attributes ("Stretch",
+ gtk_cell_renderer_text_new(), "text", 2, NULL));
+ gtk_tree_view_append_column (view,
+ gtk_tree_view_column_new_with_attributes ("Weight",
+ gtk_cell_renderer_text_new(), "text", 3, NULL));
+ #ifdef SHOW_VALID_COL
+ gtk_tree_view_append_column (view,
+ gtk_tree_view_column_new_with_attributes ("Valid",
+ gtk_cell_renderer_toggle_new(), "active", 4, NULL));
+ #endif
+ inner::dumpYastTree (ywidget, store, NULL);
+ gtk_tree_view_expand_all (view);
+ return widget;
+ }
static void dumpYastTree (YWidget *widget, GtkTreeStore *store,
GtkTreeIter *parent_node)
{
@@ -641,66 +657,26 @@
it != widget->childrenEnd(); it++)
dumpYastTree (*it, store, &iter);
}
- static void dialog_response_cb (GtkDialog *dialog, gint response, YWidget *ywidget)
+ static GtkWidget *createGtkView (GtkWidget *dialog, YWidget *ywidget)
{
- if (response == 1) {
- GtkTreeStore *store;
- GtkTreeView *view;
- store = (GtkTreeStore *) g_object_get_data (G_OBJECT (dialog), "store");
- view = (GtkTreeView *) g_object_get_data (G_OBJECT (dialog), "view");
- gtk_tree_store_clear (store);
- dumpYastTree (ywidget, store, NULL);
- gtk_tree_view_expand_all (view);
- }
- else
- gtk_widget_destroy (GTK_WIDGET (dialog));
- }
- };
+ GtkTreeStore *store;
+ store = gtk_tree_store_new (1, G_TYPE_STRING);
- int cols = 4;
-#ifdef IS_VALID_COL
- cols++;
-#endif
- GtkTreeStore *store = gtk_tree_store_new (cols,
- G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_STRING, G_TYPE_STRING
-#ifdef IS_VALID_COL
- , G_TYPE_BOOLEAN
-#endif
- );
-
- GtkTreeView *view;
- view = debug_dialog_create ("YWidget tree", store,
- G_CALLBACK (inner::dialog_response_cb), widget);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (view),
- gtk_tree_view_column_new_with_attributes ("Type",
- gtk_cell_renderer_text_new(), "text", 0, NULL));
- gtk_tree_view_append_column (GTK_TREE_VIEW (view),
- gtk_tree_view_column_new_with_attributes ("Label",
- gtk_cell_renderer_text_new(), "text", 1, NULL));
- gtk_tree_view_column_set_expand (gtk_tree_view_get_column (
- GTK_TREE_VIEW (view), 1), TRUE);
- gtk_tree_view_append_column (GTK_TREE_VIEW (view),
- gtk_tree_view_column_new_with_attributes ("Stretch",
- gtk_cell_renderer_text_new(), "text", 2, NULL));
- gtk_tree_view_append_column (GTK_TREE_VIEW (view),
- gtk_tree_view_column_new_with_attributes ("Weight",
- gtk_cell_renderer_text_new(), "text", 3, NULL));
-#ifdef IS_VALID_COL
- gtk_tree_view_append_column (GTK_TREE_VIEW (view),
- gtk_tree_view_column_new_with_attributes ("Valid",
- gtk_cell_renderer_toggle_new(), "active", 4, NULL));
-#endif
-
- inner::dumpYastTree (widget, store, NULL);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
-}
-
-void dumpGtkTree (GtkWidget *widget)
-{
- IMPL
- struct inner {
+ GtkWidget *widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
+ GtkTreeView *view = GTK_TREE_VIEW (widget);
+ gtk_tree_view_set_enable_tree_lines (view, TRUE);
+ g_object_unref (G_OBJECT (store));
+
+ g_object_set_data (G_OBJECT (dialog), "gtk-view", view);
+ g_object_set_data (G_OBJECT (dialog), "gtk-store", store);
+
+ gtk_tree_view_append_column (view,
+ gtk_tree_view_column_new_with_attributes ("Type",
+ gtk_cell_renderer_text_new(), "text", 0, NULL));
+ inner::dumpGtkTree (YGWidget::get (ywidget)->getLayout(), store, NULL);
+ gtk_tree_view_expand_all (view);
+ return widget;
+ }
static void dumpGtkTree (GtkWidget *widget, GtkTreeStore *store,
GtkTreeIter *parent_node)
{
@@ -719,36 +695,56 @@
dumpGtkTree (GTK_WIDGET (l->data), store, &iter);
}
}
- /* FIXME: re-factor this & share code [!] */
- static void dialog_response_cb (GtkDialog *dialog, gint response, GtkWidget *widget)
+ static void dialog_response_cb (GtkDialog *dialog, gint response,
+ YWidget *ywidget)
{
if (response == 1) {
- GtkTreeStore *store;
- GtkTreeView *view;
- store = (GtkTreeStore *) g_object_get_data (G_OBJECT (dialog), "store");
- view = (GtkTreeView *) g_object_get_data (G_OBJECT (dialog), "view");
- gtk_tree_store_clear (store);
- dumpGtkTree (widget, store, NULL);
- gtk_tree_view_expand_all (view);
+ GtkTreeStore *yast_store, *gtk_store;
+ GtkTreeView *yast_view, *gtk_view;
+ yast_store = (GtkTreeStore *)
+ g_object_get_data (G_OBJECT (dialog), "yast-store");
+ yast_view = (GtkTreeView *)
+ g_object_get_data (G_OBJECT (dialog), "yast-view");
+ gtk_store = (GtkTreeStore *)
+ g_object_get_data (G_OBJECT (dialog), "gtk-store");
+ gtk_view = (GtkTreeView *)
+ g_object_get_data (G_OBJECT (dialog), "gtk-view");
+ gtk_tree_store_clear (yast_store);
+ gtk_tree_store_clear (gtk_store);
+ dumpYastTree (ywidget, yast_store, NULL);
+ dumpGtkTree (YGWidget::get (ywidget)->getLayout(), gtk_store, NULL);
+ gtk_tree_view_expand_all (yast_view);
+ gtk_tree_view_expand_all (gtk_view);
}
else
gtk_widget_destroy (GTK_WIDGET (dialog));
}
+ static void add_page (GtkWidget *notebook, const char *title,
+ GtkWidget *view)
+ {
+ GtkWidget *scroll_win = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll_win),
+ GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_win),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_container_add (GTK_CONTAINER (scroll_win), view);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), scroll_win,
+ gtk_label_new (title));
+ }
};
- int cols = 1;
- GtkTreeView *view;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (cols, G_TYPE_STRING);
- view = debug_dialog_create ("gtk widget tree", store,
- G_CALLBACK (inner::dialog_response_cb), widget);
- gtk_tree_view_append_column (GTK_TREE_VIEW (view),
- gtk_tree_view_column_new_with_attributes ("Type",
- gtk_cell_renderer_text_new(), "text", 0, NULL));
+ GtkWidget *dialog = gtk_dialog_new_with_buttons ("Widget Tree", NULL,
+ GtkDialogFlags (GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_REFRESH, 1,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+ gtk_window_set_default_size (GTK_WINDOW (dialog), -1, 400);
+ g_signal_connect (G_OBJECT (dialog), "response",
+ G_CALLBACK (inner::dialog_response_cb), ywidget);
- inner::dumpGtkTree (widget, store, NULL);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
+ GtkWidget *notebook = gtk_notebook_new();
+ inner::add_page (notebook, "Yast", inner::createYastView (dialog, ywidget));
+ inner::add_page (notebook, "GTK", inner::createGtkView (dialog, ywidget));
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), notebook);
+ gtk_widget_show_all (dialog);
}
#include
Modified: trunk/gtk/src/YGUI.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGUI.h?rev=51069&r1=51068&r2=51069&view=diff
==============================================================================
--- trunk/gtk/src/YGUI.h (original)
+++ trunk/gtk/src/YGUI.h Thu Sep 11 19:36:05 2008
@@ -83,9 +83,8 @@
};
// debug helpers.
-void dumpYastTree (YWidget *widget);
+void dumpTree (YWidget *widget);
void dumpYastHtml (YWidget *widget);
-void dumpGtkTree (GtkWidget *widget);
#include
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org