Author: michael_meeks
Date: Thu May 15 11:05:59 2008
New Revision: 47551
URL: http://svn.opensuse.org/viewcvs/yast?rev=47551&view=rev
Log:
2008-05-15 Michael Meeks
* src/YGFrame.cc (findFirstFocusable,
* frame_label_mnemonic_activate):
(YGFrame::YGFrame): implement mnemonics on frames - bug 390244.
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/YGFrame.cc
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=47551&r1=47550&r2=47551&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Thu May 15 11:05:59 2008
@@ -1,3 +1,8 @@
+2008-05-15 Michael Meeks
+
+ * src/YGFrame.cc (findFirstFocusable, frame_label_mnemonic_activate):
+ (YGFrame::YGFrame): implement mnemonics on frames - bug 390244.
+
2008-05-14 Ricardo Cruz
* src/YGDialog.cc: bug fix 389635: make it transient to the last
Modified: trunk/gtk/src/YGFrame.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGFrame.cc?rev=47551&r1=47550&r2=47551&view=diff
==============================================================================
--- trunk/gtk/src/YGFrame.cc (original)
+++ trunk/gtk/src/YGFrame.cc Thu May 15 11:05:59 2008
@@ -33,6 +33,38 @@
#include "YFrame.h"
+static GtkWidget *findFirstFocusable (GtkContainer *container)
+{
+ g_return_val_if_fail (container != NULL, NULL);
+
+ for (GList *l = gtk_container_get_children (container);
+ l; l = l->next) {
+ if (GTK_WIDGET_CAN_FOCUS (l->data))
+ return GTK_WIDGET (l->data);
+ else if (GTK_IS_CONTAINER (l->data)) {
+ GtkWidget *ret = findFirstFocusable (GTK_CONTAINER (l->data));
+ if (ret)
+ return ret;
+ }
+ }
+ return NULL;
+}
+
+extern "C" {
+ static gboolean
+ frame_label_mnemonic_activate (GtkWidget *widget,
+ gboolean group_cycling,
+ GtkContainer *frame_container)
+ {
+ GtkWidget *focusable = findFirstFocusable (frame_container);
+ if (focusable == NULL) {
+ g_warning ("no focusable widgets for mnemonic");
+ return FALSE;
+ } else
+ return gtk_widget_mnemonic_activate (focusable, group_cycling);
+ }
+}
+
class YGFrame : public YFrame, public YGBaseFrame
{
public:
@@ -40,7 +72,10 @@
: YFrame (NULL, label),
YGBaseFrame (this, parent)
{
- GtkWidget *label_widget = gtk_label_new ("");
+ GtkWidget *label_widget = gtk_label_new_with_mnemonic ("");
+ g_signal_connect (G_OBJECT (label_widget), "mnemonic_activate",
+ G_CALLBACK (frame_label_mnemonic_activate),
+ getWidget());
YGUtils::setWidgetFont (GTK_WIDGET (label_widget), PANGO_WEIGHT_BOLD,
PANGO_SCALE_MEDIUM);
gtk_widget_show (label_widget);
@@ -51,12 +86,13 @@
virtual ~YGFrame() {}
// YFrame
- virtual void setLabel (const string &str)
+ virtual void setLabel (const string &_str)
{
IMPL
GtkWidget *label = gtk_frame_get_label_widget (GTK_FRAME (getWidget()));
- gtk_label_set_text (GTK_LABEL (label), str.c_str());
- YFrame::setLabel (str);
+ string str (YGUtils::mapKBAccel (_str));
+ gtk_label_set_text_with_mnemonic (GTK_LABEL (label), str.c_str());
+ YFrame::setLabel (_str);
}
// Debug
@@ -85,14 +121,14 @@
YGBaseFrame (this, parent)
{
IMPL
- GtkWidget *button = gtk_check_button_new_with_mnemonic("");
+ GtkWidget *button = gtk_check_button_new_with_mnemonic("");
YGUtils::setWidgetFont (GTK_WIDGET (button), PANGO_WEIGHT_BOLD,
PANGO_SCALE_MEDIUM);
gtk_widget_show_all (button);
gtk_frame_set_label_widget (GTK_FRAME (getWidget()), button);
setLabel (label);
- setValue (checked);
+ setValue (checked);
g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (toggled_cb), this);
}
@@ -101,8 +137,8 @@
// YCheckBoxFrame
virtual void setLabel (const string &_str)
{
- GtkWidget *button = gtk_frame_get_label_widget (GTK_FRAME (getWidget()));
- GtkLabel *label = GTK_LABEL (GTK_BIN (button)->child);
+ GtkWidget *button = gtk_frame_get_label_widget (GTK_FRAME (getWidget()));
+ GtkLabel *label = GTK_LABEL (GTK_BIN (button)->child);
string str (YGUtils::mapKBAccel (_str));
gtk_label_set_text_with_mnemonic (label, str.c_str());
@@ -121,7 +157,7 @@
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), value);
}
- virtual void setEnabled (bool enabled)
+ virtual void setEnabled (bool enabled)
{
GtkWidget *frame = getWidget();
@@ -140,7 +176,7 @@
YGWIDGET_IMPL_CHILD_REMOVED (getWidget())
private:
- static void toggled_cb (GtkWidget *widget, YGCheckBoxFrame *pThis)
+ static void toggled_cb (GtkWidget *widget, YGCheckBoxFrame *pThis)
{
pThis->setEnabled (true);
if (pThis->notify())
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org