Blame tests/testrecentchooser.c

Packit 98cdb6
/* testrecentchooser.c
Packit 98cdb6
 * Copyright (C) 2006  Emmanuele Bassi.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Library General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 98cdb6
 * Library General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Library General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#include "config.h"
Packit 98cdb6
Packit 98cdb6
#include <string.h>
Packit 98cdb6
#include <sys/types.h>
Packit 98cdb6
#include <sys/stat.h>
Packit 98cdb6
#include <stdlib.h>
Packit 98cdb6
#include <time.h>
Packit 98cdb6
#ifdef HAVE_UNISTD_H
Packit 98cdb6
#include <unistd.h>
Packit 98cdb6
#endif
Packit 98cdb6
#include <gtk/gtk.h>
Packit 98cdb6
Packit 98cdb6
#ifdef G_OS_WIN32
Packit 98cdb6
# include <io.h>
Packit 98cdb6
# define localtime_r(t,b) *(b) = localtime (t)
Packit 98cdb6
# ifndef S_ISREG
Packit 98cdb6
#  define S_ISREG(m) ((m) & _S_IFREG)
Packit 98cdb6
# endif
Packit 98cdb6
#endif
Packit 98cdb6
Packit 98cdb6
#include "prop-editor.h"
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
print_current_item (GtkRecentChooser *chooser)
Packit 98cdb6
{
Packit 98cdb6
  gchar *uri;
Packit 98cdb6
Packit 98cdb6
  uri = gtk_recent_chooser_get_current_uri (chooser);
Packit 98cdb6
  g_print ("Current item changed :\n  %s\n", uri ? uri : "null");
Packit 98cdb6
  g_free (uri);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
print_selected (GtkRecentChooser *chooser)
Packit 98cdb6
{
Packit 98cdb6
  gsize uris_len, i;
Packit 98cdb6
  gchar **uris = gtk_recent_chooser_get_uris (chooser, &uris_len);
Packit 98cdb6
Packit 98cdb6
  g_print ("Selection changed :\n");
Packit 98cdb6
  for (i = 0; i < uris_len; i++)
Packit 98cdb6
    g_print ("  %s\n", uris[i]);
Packit 98cdb6
  g_print ("\n");
Packit 98cdb6
Packit 98cdb6
  g_strfreev (uris);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
response_cb (GtkDialog *dialog,
Packit 98cdb6
	     gint       response_id)
Packit 98cdb6
{
Packit 98cdb6
  if (response_id == GTK_RESPONSE_OK)
Packit 98cdb6
    {
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    g_print ("Dialog was closed\n");
Packit 98cdb6
Packit 98cdb6
  gtk_main_quit ();
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
filter_changed (GtkRecentChooserDialog *dialog,
Packit 98cdb6
		gpointer                data)
Packit 98cdb6
{
Packit 98cdb6
  g_print ("recent filter changed\n");
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
notify_multiple_cb (GtkWidget  *dialog,
Packit 98cdb6
		    GParamSpec *pspec,
Packit 98cdb6
		    GtkWidget  *button)
Packit 98cdb6
{
Packit 98cdb6
  gboolean multiple;
Packit 98cdb6
Packit 98cdb6
  multiple = gtk_recent_chooser_get_select_multiple (GTK_RECENT_CHOOSER (dialog));
Packit 98cdb6
Packit 98cdb6
  gtk_widget_set_sensitive (button, multiple);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
kill_dependent (GtkWindow *win,
Packit 98cdb6
		GtkObject *dep)
Packit 98cdb6
{
Packit 98cdb6
  gtk_object_destroy (dep);
Packit 98cdb6
  g_object_unref (dep);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
int
Packit 98cdb6
main (int   argc,
Packit 98cdb6
      char *argv[])
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *control_window;
Packit 98cdb6
  GtkWidget *vbbox;
Packit 98cdb6
  GtkWidget *button;
Packit 98cdb6
  GtkWidget *dialog;
Packit 98cdb6
  GtkWidget *prop_editor;
Packit 98cdb6
  GtkRecentFilter *filter;
Packit 98cdb6
  gint i;
Packit 98cdb6
  gboolean multiple = FALSE;
Packit 98cdb6
  
Packit 98cdb6
  gtk_init (&argc, &argv);
Packit 98cdb6
Packit 98cdb6
  /* to test rtl layout, set RTL=1 in the environment */
Packit 98cdb6
  if (g_getenv ("RTL"))
Packit 98cdb6
    gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
Packit 98cdb6
Packit 98cdb6
  for (i = 1; i < argc; i++)
Packit 98cdb6
    {
Packit 98cdb6
      if (!strcmp ("--multiple", argv[i]))
Packit 98cdb6
	multiple = TRUE;
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  dialog = g_object_new (GTK_TYPE_RECENT_CHOOSER_DIALOG,
Packit 98cdb6
		         "select-multiple", multiple,
Packit 98cdb6
                         "show-tips", TRUE,
Packit 98cdb6
                         "show-icons", TRUE,
Packit 98cdb6
			 NULL);
Packit 98cdb6
  gtk_window_set_title (GTK_WINDOW (dialog), "Select a file");
Packit 98cdb6
  gtk_dialog_add_buttons (GTK_DIALOG (dialog),
Packit 98cdb6
		  	  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
Packit 98cdb6
			  GTK_STOCK_OPEN, GTK_RESPONSE_OK,
Packit 98cdb6
			  NULL);
Packit 98cdb6
  
Packit 98cdb6
  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
Packit 98cdb6
Packit 98cdb6
  g_signal_connect (dialog, "item-activated",
Packit 98cdb6
		    G_CALLBACK (print_current_item), NULL);
Packit 98cdb6
  g_signal_connect (dialog, "selection-changed",
Packit 98cdb6
		    G_CALLBACK (print_selected), NULL);
Packit 98cdb6
  g_signal_connect (dialog, "response",
Packit 98cdb6
		    G_CALLBACK (response_cb), NULL);
Packit 98cdb6
  
Packit 98cdb6
  /* filters */
Packit 98cdb6
  filter = gtk_recent_filter_new ();
Packit 98cdb6
  gtk_recent_filter_set_name (filter, "All Files");
Packit 98cdb6
  gtk_recent_filter_add_pattern (filter, "*");
Packit 98cdb6
  gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (dialog), filter);
Packit 98cdb6
Packit 98cdb6
  filter = gtk_recent_filter_new ();
Packit 98cdb6
  gtk_recent_filter_set_name (filter, "Only PDF Files");
Packit 98cdb6
  gtk_recent_filter_add_mime_type (filter, "application/pdf");
Packit 98cdb6
  gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (dialog), filter);
Packit 98cdb6
Packit 98cdb6
  g_signal_connect (dialog, "notify::filter",
Packit 98cdb6
		    G_CALLBACK (filter_changed), NULL);
Packit 98cdb6
Packit 98cdb6
  gtk_recent_chooser_set_filter (GTK_RECENT_CHOOSER (dialog), filter);
Packit 98cdb6
Packit 98cdb6
  filter = gtk_recent_filter_new ();
Packit 98cdb6
  gtk_recent_filter_set_name (filter, "PNG and JPEG");
Packit 98cdb6
  gtk_recent_filter_add_mime_type (filter, "image/png");
Packit 98cdb6
  gtk_recent_filter_add_mime_type (filter, "image/jpeg");
Packit 98cdb6
  gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (dialog), filter);
Packit 98cdb6
Packit 98cdb6
  gtk_widget_show_all (dialog);
Packit 98cdb6
Packit 98cdb6
  prop_editor = create_prop_editor (G_OBJECT (dialog), GTK_TYPE_RECENT_CHOOSER);
Packit 98cdb6
Packit 98cdb6
  control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit 98cdb6
Packit 98cdb6
  vbbox = gtk_vbutton_box_new ();
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (control_window), vbbox);
Packit 98cdb6
Packit 98cdb6
  button = gtk_button_new_with_mnemonic ("_Select all");
Packit 98cdb6
  gtk_widget_set_sensitive (button, multiple);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (vbbox), button);
Packit 98cdb6
  g_signal_connect_swapped (button, "clicked",
Packit 98cdb6
		            G_CALLBACK (gtk_recent_chooser_select_all), dialog);
Packit 98cdb6
  g_signal_connect (dialog, "notify::select-multiple",
Packit 98cdb6
		    G_CALLBACK (notify_multiple_cb), button);
Packit 98cdb6
Packit 98cdb6
  button = gtk_button_new_with_mnemonic ("_Unselect all");
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (vbbox), button);
Packit 98cdb6
  g_signal_connect_swapped (button, "clicked",
Packit 98cdb6
		            G_CALLBACK (gtk_recent_chooser_unselect_all), dialog);
Packit 98cdb6
Packit 98cdb6
  gtk_widget_show_all (control_window);
Packit 98cdb6
  
Packit 98cdb6
  g_object_ref (control_window);
Packit 98cdb6
  g_signal_connect (dialog, "destroy",
Packit 98cdb6
		    G_CALLBACK (kill_dependent), control_window);
Packit 98cdb6
  
Packit 98cdb6
  g_object_ref (dialog);
Packit 98cdb6
  gtk_main ();
Packit 98cdb6
  gtk_widget_destroy (dialog);
Packit 98cdb6
  g_object_unref (dialog);
Packit 98cdb6
Packit 98cdb6
  return 0;
Packit 98cdb6
}