X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=src%2Fgrip.c;h=8d65a3eac27d73e6b412db42bfb5431f9aa6f974;hb=3a61b18abc33a665f680701ce3fc6cc4efc82870;hp=3b74664fd7fb47fdb5a72607e0f70c24ce18f0cb;hpb=64cdc5a741a2ab7cb8666e81be138657a0fea46e;p=hvgrip.git diff --git a/src/grip.c b/src/grip.c index 3b74664..8d65a3e 100644 --- a/src/grip.c +++ b/src/grip.c @@ -30,7 +30,6 @@ #include #include #include "grip.h" -#include #include "discdb.h" #include "cdplay.h" #include "discedit.h" @@ -53,6 +52,9 @@ static void LoadImages(GripGUI *uinfo); static void DoLoadConfig(GripInfo *ginfo); void DoSaveConfig(GripInfo *ginfo); +#define GRIP_URL "http://www.hugovil.com/hvgrip" +#define GRIP_HTML_DOC_URL "file://"DOCDIR"/grip.html" + #define BASE_CFG_ENTRIES \ {"grip_version",CFG_ENTRY_STRING,256,ginfo->version},\ {"cd_device",CFG_ENTRY_STRING,256,ginfo->cd_device},\ @@ -124,11 +126,13 @@ void DoSaveConfig(GripInfo *ginfo); {"selected_ripper",CFG_ENTRY_INT,0,&ginfo->selected_ripper},\ {"play_mode",CFG_ENTRY_INT,0,&ginfo->play_mode},\ {"playloop",CFG_ENTRY_BOOL,0,&ginfo->playloop},\ -{"win_width",CFG_ENTRY_INT,0,&uinfo->win_width},\ -{"win_height",CFG_ENTRY_INT,0,&uinfo->win_height},\ +{"win_width",CFG_ENTRY_INT,0,&uinfo->size_hints.base_width},\ +{"win_height",CFG_ENTRY_INT,0,&uinfo->size_hints.base_height},\ {"win_height_edit",CFG_ENTRY_INT,0,&uinfo->win_height_edit},\ -{"win_width_min",CFG_ENTRY_INT,0,&uinfo->win_width_min},\ -{"win_height_min",CFG_ENTRY_INT,0,&uinfo->win_height_min},\ +{"win_width_min",CFG_ENTRY_INT,0,&uinfo->size_hints.min_width},\ +{"win_height_min",CFG_ENTRY_INT,0,&uinfo->size_hints.min_height},\ +{"win_pos_x",CFG_ENTRY_INT,0,&uinfo->x},\ +{"win_pos_y",CFG_ENTRY_INT,0,&uinfo->y},\ {"vol_vis",CFG_ENTRY_BOOL,0,&uinfo->volvis},\ {"track_edit_vis",CFG_ENTRY_BOOL,0,&uinfo->track_edit_visible},\ {"track_prog_vis",CFG_ENTRY_BOOL,0,&uinfo->track_prog_visible},\ @@ -152,7 +156,7 @@ gboolean AppWindowStateCB(GtkWidget *widget, GdkEventWindowState *event, gpointe GripInfo *ginfo = (GripInfo*)data; GripGUI *uinfo = &(ginfo->gui_info); GdkWindowState state = event->new_window_state; - + if ((state & GDK_WINDOW_STATE_WITHDRAWN) || (state & GDK_WINDOW_STATE_ICONIFIED)) { ginfo->app_visible = FALSE; return TRUE; @@ -176,10 +180,8 @@ GtkWidget *GripNew(const gchar* geometry,char *device,char *scsi_device, int major,minor,point; char buf[256]; - gnome_window_icon_set_default_from_file(GNOME_ICONDIR"/gripicon.png"); + app = gtk_window_new(GTK_WINDOW_TOPLEVEL); - app=gnome_app_new(PACKAGE,_("Grip")); - ginfo=g_new0(GripInfo,1); gtk_object_set_user_data(GTK_OBJECT(app),(gpointer)ginfo); @@ -191,31 +193,39 @@ GtkWidget *GripNew(const gchar* geometry,char *device,char *scsi_device, uinfo->encode_status_window=NULL; uinfo->track_list=NULL; - uinfo->win_width=WINWIDTH; - uinfo->win_height=WINHEIGHT; + /* Size hints */ + uinfo->size_hints.min_width = MIN_WINWIDTH; + uinfo->size_hints.min_height = MIN_WINHEIGHT; + uinfo->size_hints.base_width = WINWIDTH; + uinfo->size_hints.base_height = WINHEIGHT; + uinfo->size_hints.width_inc = 10; + uinfo->size_hints.height_inc = 10; + uinfo->win_height_edit=WINHEIGHTEDIT; - uinfo->win_width_min=MIN_WINWIDTH; - uinfo->win_height_min=MIN_WINHEIGHT; - - /* if(geometry != NULL) { - gint x,y,w,h; - - if(gnome_parse_geometry(geometry, - &x,&y,&w,&h)) { - if(x != -1) { - gtk_widget_set_uposition(app,x,y); - } - - if(w != -1) { - uinfo->win_width=w; - uinfo->win_height=h; - } - } - else { - g_error(_("Could not parse geometry string `%s'"), geometry); + + gtk_window_set_geometry_hints(GTK_WINDOW(app), app, + &uinfo->size_hints, + GDK_HINT_MIN_SIZE | + GDK_HINT_BASE_SIZE | + GDK_HINT_RESIZE_INC); + + if(geometry != NULL) { + /* + If either a size or a position can be extracted from the geometry string, + gtk-window-parse-geometry returns ‘#t’ and calls + gtk-window-set-default-size and/or gtk-window-move to resize/move the + window. + */ + if (!gtk_window_parse_geometry(GTK_WINDOW(app), geometry)) { + fprintf (stderr, "Failed to parse geometry string '%s'\n", geometry); + } else { + /* For saving the position */ + gtk_window_get_position(GTK_WINDOW(uinfo->app), &uinfo->x, &uinfo->y); } } - */ + + Debug("X = %d\n", uinfo->x); + Debug("Y = %d\n", uinfo->y); if(config_filename && *config_filename) g_snprintf(ginfo->config_filename,256,"%s",config_filename); @@ -251,23 +261,30 @@ GtkWidget *GripNew(const gchar* geometry,char *device,char *scsi_device, gtk_widget_set_size_request(GTK_WIDGET(app),MIN_WINWIDTH, MIN_WINHEIGHT); - gtk_window_resize(GTK_WINDOW(app),uinfo->win_width_min, - uinfo->win_height_min); + gtk_window_resize(GTK_WINDOW(app),uinfo->size_hints.min_width, + uinfo->size_hints.min_height); } else { gtk_widget_set_size_request(GTK_WIDGET(app),WINWIDTH, WINHEIGHT); if(uinfo->track_edit_visible) { - gtk_window_resize(GTK_WINDOW(app),uinfo->win_width, + gtk_window_resize(GTK_WINDOW(app),uinfo->size_hints.base_width, uinfo->win_height_edit); } else { - gtk_window_resize(GTK_WINDOW(app),uinfo->win_width, - uinfo->win_height); + gtk_window_resize(GTK_WINDOW(app),uinfo->size_hints.base_width, + uinfo->size_hints.base_height); } } + Debug("X = %d\n", uinfo->x); + Debug("Y = %d\n", uinfo->y); + gtk_window_move(GTK_WINDOW(app), uinfo->x, uinfo->y); + + /* Position window from values in config file. */ + gtk_window_move(GTK_WINDOW(app),uinfo->x, uinfo->y); + gtk_widget_realize(app); uinfo->winbox=gtk_vbox_new(FALSE,3); @@ -299,17 +316,19 @@ GtkWidget *GripNew(const gchar* geometry,char *device,char *scsi_device, uinfo->playopts=MakePlayOpts(ginfo); gtk_box_pack_start(GTK_BOX(uinfo->winbox),uinfo->playopts,FALSE,FALSE,0); if(uinfo->track_prog_visible) gtk_widget_show(uinfo->playopts); - + uinfo->controls=MakeControls(ginfo); if(uinfo->minimized) gtk_box_pack_start(GTK_BOX(uinfo->winbox),uinfo->controls,TRUE,TRUE,0); else gtk_box_pack_start(GTK_BOX(uinfo->winbox),uinfo->controls,FALSE,FALSE,0); gtk_widget_show(uinfo->controls); - - gnome_app_set_contents(GNOME_APP(app),uinfo->winbox); + + gtk_container_add(GTK_CONTAINER(app), uinfo->winbox); gtk_widget_show(uinfo->winbox); + gtk_window_set_icon_from_file(GTK_WINDOW(app), GNOME_ICONDIR"/gripicon.png", NULL); + CheckNewDisc(ginfo,FALSE); /* Check if we're running this version for the first time */ @@ -352,8 +371,10 @@ void GripDie(GtkWidget *widget,gpointer data) static void ReallyDie(gpointer data) { GripInfo *ginfo; + GripGUI *uinfo; ginfo=(GripInfo *)data; + uinfo = &(ginfo->gui_info); #ifndef GRIPCD if(ginfo->ripping_a_disc) KillRip(NULL,ginfo); @@ -363,6 +384,9 @@ static void ReallyDie(gpointer data) if(!ginfo->no_interrupt) CDStop(&(ginfo->disc)); + /* For saving the window position */ + gtk_window_get_position(GTK_WINDOW(uinfo->app), &uinfo->x, &uinfo->y); + DoSaveConfig(ginfo); gtk_main_quit(); @@ -468,10 +492,23 @@ void LogStatus(GripInfo *ginfo,char *fmt,...) static void DoHelp(GtkWidget *widget,gpointer data) { char *section; + char *uri; section=(char *)data; - gnome_help_display("grip.xml",section,NULL); + if (section) { + /* + * This doesn't work for the moment: the "#section" seems to be + * ignored by g_app_info_launch_default_for_uri(). + */ + uri = g_strdup_printf("%s#%s", GRIP_HTML_DOC_URL, section); + } + else { + uri = g_strdup_printf("%s", GRIP_HTML_DOC_URL); + } + + g_app_info_launch_default_for_uri(uri, NULL, NULL); + g_free (uri); } static void MakeHelpPage(GripInfo *ginfo) @@ -580,7 +617,7 @@ void MakeAboutPage(GripGUI *uinfo) hbox=gtk_hbox_new(TRUE,0); - button=gtk_button_new_with_label("http://www.nostatic.org/grip"); + button=gtk_button_new_with_label(GRIP_URL); gtk_widget_set_style(button,uinfo->style_dark_grey); gtk_widget_set_style(GTK_BIN(button)->child, uinfo->style_dark_grey); @@ -623,7 +660,7 @@ static void MakeStyles(GripGUI *uinfo) static void Homepage(void) { - system("gnome-moz-remote http://www.nostatic.org/grip"); + g_app_info_launch_default_for_uri(GRIP_URL, NULL, NULL); } static void LoadImages(GripGUI *uinfo)