gtk: save games list window size and position

This commit is contained in:
Eric House 2016-08-05 18:31:17 -07:00
parent 25723bbb0f
commit 012b015f82
3 changed files with 37 additions and 0 deletions

View file

@ -66,6 +66,7 @@ void deleteGame( sqlite3* pDb, sqlite3_int64 rowid );
#define KEY_LDEVID "LDEVID" #define KEY_LDEVID "LDEVID"
#define KEY_SMSPHONE "SMSPHONE" #define KEY_SMSPHONE "SMSPHONE"
#define KEY_SMSPORT "SMSPORT" #define KEY_SMSPORT "SMSPORT"
#define KEY_WIN_LOC "WIN_LOC"
void db_store( sqlite3* dbp, const gchar* key, const gchar* value ); void db_store( sqlite3* dbp, const gchar* key, const gchar* value );
XP_Bool db_fetch( sqlite3* dbp, const gchar* key, gchar* buf, gint buflen ); XP_Bool db_fetch( sqlite3* dbp, const gchar* key, gchar* buf, gint buflen );

View file

@ -418,6 +418,13 @@ handle_destroy( GtkWidget* XP_UNUSED(widget), gpointer data )
// freeGlobals( globals ); // freeGlobals( globals );
} }
g_slist_free( apg->globalsList ); g_slist_free( apg->globalsList );
gchar buf[64];
sprintf( buf, "%d:%d:%d:%d", apg->lastConfigure.x,
apg->lastConfigure.y, apg->lastConfigure.width,
apg->lastConfigure.height );
db_store( apg->params->pDb, KEY_WIN_LOC, buf );
gtk_main_quit(); gtk_main_quit();
} }
@ -428,6 +435,16 @@ handle_quit_button( GtkWidget* XP_UNUSED(widget), gpointer data )
handle_destroy( NULL, apg ); handle_destroy( NULL, apg );
} }
static gboolean
window_configured( GtkWidget* XP_UNUSED(widget),
GdkEventConfigure* event, GtkAppGlobals* apg )
{
/* XP_LOGF( "%s(x=%d, y=%d, width=%d, height=%d)", __func__, */
/* event->x, event->y, event->width, event->height ); */
apg->lastConfigure = *event;
return FALSE;
}
static GtkWidget* static GtkWidget*
addButton( gchar* label, GtkWidget* parent, GCallback proc, void* closure ) addButton( gchar* label, GtkWidget* parent, GCallback proc, void* closure )
{ {
@ -462,6 +479,19 @@ setWindowTitle( GtkAppGlobals* apg )
gtk_window_set_title( GTK_WINDOW(window), title ); gtk_window_set_title( GTK_WINDOW(window), title );
} }
static void
trySetWinConfig( GtkAppGlobals* apg )
{
gchar buf[64];
if ( db_fetch( apg->params->pDb, KEY_WIN_LOC, buf, sizeof(buf)) ) {
int xx, yy, width, height;
sscanf( buf, "%d:%d:%d:%d", &xx, &yy, &width, &height );
gtk_window_resize( GTK_WINDOW(apg->window), width, height );
gtk_window_move (GTK_WINDOW(apg->window), xx, yy );
}
}
static void static void
makeGamesWindow( GtkAppGlobals* apg ) makeGamesWindow( GtkAppGlobals* apg )
{ {
@ -471,9 +501,13 @@ makeGamesWindow( GtkAppGlobals* apg )
apg->window = window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); apg->window = window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
g_signal_connect( G_OBJECT(window), "destroy", g_signal_connect( G_OBJECT(window), "destroy",
G_CALLBACK(handle_destroy), apg ); G_CALLBACK(handle_destroy), apg );
g_signal_connect( window, "configure_event",
G_CALLBACK(window_configured), apg );
setWindowTitle( apg ); setWindowTitle( apg );
trySetWinConfig( apg );
GtkWidget* swin = gtk_scrolled_window_new( NULL, NULL ); GtkWidget* swin = gtk_scrolled_window_new( NULL, NULL );
gtk_container_add( GTK_CONTAINER(window), swin ); gtk_container_add( GTK_CONTAINER(window), swin );
gtk_widget_show( swin ); gtk_widget_show( swin );

View file

@ -249,6 +249,8 @@ typedef struct _GtkAppGlobals {
GtkWidget* openButton; GtkWidget* openButton;
GtkWidget* rematchButton; GtkWidget* rematchButton;
GtkWidget* deleteButton; GtkWidget* deleteButton;
/* save window position */
GdkEventConfigure lastConfigure;
} GtkAppGlobals; } GtkAppGlobals;
#endif #endif