Ok...removing alot of from from MyMusic at once was both:
a) Annoying, I had to click "Yes" for each removal
b) Was quite buggy and then segfault
After the cvs update tonight there is a new snag:
c) Pressing MyMusic hangs freeamp while maxing out CPU usage. (This is
after "rm -rf ~/.freeamp ~/MyMusic"). I erased the install site and
did a fresh make install, with the same problem. Short of checking
with a make clean, this looks like a freshly added bug. The
Options/Download/Files buttons still bring up their dialogs.
================
For problem a)
The attached patch makes the first letter of all the standard dialog
buttons underlined, and Alt+Letter clicks the button. A button is
also set to capture the escape button. A button is passed to
gtk_widget_grab_focus to set the default button (simply press enter).
If there is an entry box, then it gets the focus instead (untested).
The segfaulting will have to wait until later.....
(I expect to have to learn a few data structures to follow that one).
Pop Quiz:
Anyone have an indent mode already setup for freeamp in Emacs?
--
Chris Kuklewicz
Index: ui/musicbrowser/unix/src/gtkmessagedialog.cpp
===================================================================
RCS file: /src/repository/freeamp/ui/musicbrowser/unix/src/gtkmessagedialog.cpp,v
retrieving revision 1.6
diff -u -r1.6 gtkmessagedialog.cpp
--- ui/musicbrowser/unix/src/gtkmessagedialog.cpp 2000/08/30 13:45:31 1.6
+++ ui/musicbrowser/unix/src/gtkmessagedialog.cpp 2000/09/11 21:35:31
@@ -23,6 +23,7 @@
#include <gtk/gtk.h>
#include <unistd.h>
+#include <gdk/gdkkeysyms.h>
#include "gtkmessagedialog.h"
@@ -118,6 +119,26 @@
p->SetCheck(bool(i));
}
+/* Keyboard accelerators courtesy of Chris Kuklewicz <[EMAIL PROTECTED]> */
+static GtkWidget* new_button_with_accel(const char* uline_label, GtkAccelGroup
+*accel_group,
+ bool useEscape=false)
+{
+ GtkWidget *button;
+ GtkWidget *label;
+ button = gtk_button_new();
+ label = gtk_label_new(NULL);
+ gtk_widget_add_accelerator(button, "clicked", accel_group,
+ gtk_label_parse_uline(GTK_LABEL(label), uline_label),
+ GDK_MOD1_MASK,(GtkAccelFlags)0);
+ if (useEscape)
+ {
+ gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0,
+(GtkAccelFlags)0);
+ }
+ gtk_widget_show(label);
+ gtk_container_add(GTK_CONTAINER(button), label);
+ return button;
+}
+
MessageDialogReturnEnum GTKMessageDialog::
Show(const string &oMessage,
const string &oTitle,
@@ -125,6 +146,8 @@
bool inMain)
{
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkAccelGroup *accel_group = gtk_accel_group_new();
+ gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
if (inMain)
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
gtk_signal_connect(GTK_OBJECT(window), "destroy",
@@ -168,72 +191,80 @@
int iRet = 0;
switch (eType) {
case kMessageOk: {
- button = gtk_button_new_with_label("OK");
+ button=new_button_with_accel("_Ok",accel_group,true);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(ok_click), &iRet);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(window));
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_widget_show(button);
+ gtk_widget_grab_focus(button);
break; }
case kMessageYesNo: {
- button = gtk_button_new_with_label("Yes");
+ button = new_button_with_accel("_Yes",accel_group);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(yes_click), &iRet);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(window));
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_widget_show(button);
+ gtk_widget_grab_focus(button);
- button = gtk_button_new_with_label("No");
+ button = new_button_with_accel("_No",accel_group,true);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(no_click), &iRet);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(window));
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_widget_show(button);
break; }
case kMessageOkCancel: {
- button = gtk_button_new_with_label("OK");
+ button = new_button_with_accel("_Ok",accel_group);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(ok_click), &iRet);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(window));
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_widget_show(button);
+ gtk_widget_grab_focus(button);
- button = gtk_button_new_with_label("Cancel");
+ button = new_button_with_accel("_Cancel",accel_group,true);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(cancel_click), &iRet);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(window));
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_widget_show(button);
break; }
case kMessageMonicaSucks: {
- button = gtk_button_new_with_label("Retry");
+ button = new_button_with_accel("_Retry",accel_group);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(retry_click), &iRet);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(window));
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_widget_show(button);
+ gtk_widget_grab_focus(button);
- button = gtk_button_new_with_label("Cancel");
+ button = new_button_with_accel("_Cancel",accel_group,true);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(cancel_click), &iRet);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(window));
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_widget_show(button);
break; }
+ }
+ if (hasEntry)
+ {
+ gtk_widget_grab_focus(entryBox);
}
gtk_widget_show(window);