X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/ac9049029faddf79272076e79c3f4ab33da778a6..a89e0ecf7c67ef6af6678985060a0d8e7bae5fba:/disobedience/disobedience.c diff --git a/disobedience/disobedience.c b/disobedience/disobedience.c index 10b62eb..8ca36e5 100644 --- a/disobedience/disobedience.c +++ b/disobedience/disobedience.c @@ -44,6 +44,9 @@ GtkWidget *report_label; /** @brief Main tab group */ GtkWidget *tabs; +/** @brief Mini-mode widget for playing track */ +GtkWidget *playing_mini; + /** @brief Main client */ disorder_eclient *client; @@ -104,8 +107,6 @@ static GtkWidget *queue; static GtkWidget *notebook_box; -static int main_current_fullmode = 1; - static void check_rtp_address(const char *event, void *eventdata, void *callbackdata); @@ -171,36 +172,37 @@ static GtkWidget *notebook(void) { return tabs; } +/* Tracking of window sizes */ +static int toplevel_width = 640, toplevel_height = 480; +static int mini_width = 480, mini_height = 140; + static void main_minimode(const char attribute((unused)) *event, void attribute((unused)) *evendata, void attribute((unused)) *callbackdata) { - if(full_mode == main_current_fullmode) - return; if(full_mode) { - /* Remove queue from display */ - g_object_ref(queue); - gtk_container_remove(GTK_CONTAINER(notebook_box), queue); - /* Add queue to notebook */ - gtk_notebook_prepend_page(GTK_NOTEBOOK(tabs), queue, - gtk_label_new("Queue")); - g_object_unref(queue); - /* Add notebook to display */ - gtk_container_add(GTK_CONTAINER(notebook_box), tabs); - g_object_unref(tabs); + gtk_widget_show(tabs); + gtk_widget_hide(playing_mini); /* Show the queue (bit confusing otherwise!) */ gtk_notebook_set_current_page(GTK_NOTEBOOK(tabs), 0); + gtk_window_resize(GTK_WINDOW(toplevel), toplevel_width, toplevel_height); } else { - /* Remove notebook from display */ - g_object_ref(tabs); - gtk_container_remove(GTK_CONTAINER(notebook_box), tabs); - /* Remove queue from notebook */ - g_object_ref(queue); - gtk_container_remove(GTK_CONTAINER(tabs), queue); - /* Add queue to display */ - gtk_container_add(GTK_CONTAINER(notebook_box), queue); - g_object_unref(queue); + gtk_widget_hide(tabs); + gtk_widget_show(playing_mini); + gtk_window_resize(GTK_WINDOW(toplevel), mini_width, mini_height); + } +} + +/* Called when the window size is allocate */ +static void toplevel_size_allocate(GtkWidget attribute((unused)) *w, + GtkAllocation *a, + gpointer attribute((unused)) user_data) { + if(full_mode) { + toplevel_width = a->width; + toplevel_height = a->height; + } else { + mini_width = a->width; + mini_height = a->height; } - main_current_fullmode = full_mode; } /** @brief Create and populate the main window */ @@ -211,10 +213,14 @@ static void make_toplevel_window(void) { D(("top_window")); toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* default size is too small */ - gtk_window_set_default_size(GTK_WINDOW(toplevel), 640, 480); + gtk_window_set_default_size(GTK_WINDOW(toplevel), + toplevel_width, toplevel_height); /* terminate on close */ g_signal_connect(G_OBJECT(toplevel), "delete_event", G_CALLBACK(delete_event), NULL); + /* track size */ + g_signal_connect(G_OBJECT(toplevel), "size-allocate", + G_CALLBACK(toplevel_size_allocate), NULL); /* lay out the window */ gtk_window_set_title(GTK_WINDOW(toplevel), "Disobedience"); gtk_container_add(GTK_CONTAINER(toplevel), vbox); @@ -229,6 +235,12 @@ static void make_toplevel_window(void) { FALSE, /* expand */ FALSE, /* fill */ 0); + playing_mini = playing_widget(); + gtk_box_pack_start(GTK_BOX(vbox), + playing_mini, + FALSE, + FALSE, + 0); notebook_box = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(notebook_box), notebook()); gtk_container_add(GTK_CONTAINER(vbox), notebook_box); @@ -518,6 +530,7 @@ int main(int argc, char **argv) { /* reset styles now everything has its name */ gtk_rc_reset_styles(gtk_settings_get_for_screen(gdk_screen_get_default())); gtk_widget_show_all(toplevel); + gtk_widget_hide(playing_mini); /* issue a NOP every so often */ g_timeout_add_full(G_PRIORITY_LOW, 2000/*interval, ms*/,