Yasumichi Akahoshi
yasum****@users*****
2005年 4月 10日 (日) 18:30:37 JST
Index: libcxp/src/cxp-about-dialog.c diff -u libcxp/src/cxp-about-dialog.c:1.1 libcxp/src/cxp-about-dialog.c:1.2 --- libcxp/src/cxp-about-dialog.c:1.1 Sun Apr 10 04:11:49 2005 +++ libcxp/src/cxp-about-dialog.c Sun Apr 10 18:30:37 2005 @@ -33,7 +33,7 @@ typedef struct { - gchar *title; + gchar *appname; gchar *version; gchar *url; gchar *copyright; @@ -56,9 +56,9 @@ static void cxp_about_dialog_class_init (gpointer g_class, gpointer g_class_data); +static void cxp_about_dialog_init (CxpAboutDialog *dialog); static GObject * cxp_about_dialog_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties); -static void cxp_about_dialog_instance_init (GTypeInstance * instance, - gpointer g_class); +static void cxp_about_dialog_construct_child (CxpAboutDialog *self); static void cxp_about_dialog_dispose (GObject * obj); static void cxp_about_dialog_finalize (GObject * obj); static void cxp_about_dialog_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); @@ -80,7 +80,7 @@ gobject_class->get_property = cxp_about_dialog_get_property; /* install properties. */ - pspec = g_param_spec_string ("title", + pspec = g_param_spec_string ("appname", "Application name", "Set application name", NULL, @@ -123,6 +123,18 @@ g_type_class_add_private (dialog_class, sizeof (CxpAboutDialogPrivate)); } +static void cxp_about_dialog_init (CxpAboutDialog *dialog) +{ + CxpAboutDialogPrivate *private = CXP_ABOUT_DIALOG_GET_PRIVATE(dialog); + + private->appname = NULL; + private->version = NULL; + private->url = NULL; + private->copyright = NULL; + private->image_file = NULL; + private->dispose_has_run = FALSE; +} + static GObject * cxp_about_dialog_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { GObject *obj; @@ -133,45 +145,65 @@ n_construct_properties, construct_properties); - cxp_about_dialog_instance_init(obj, klass); + cxp_about_dialog_construct_child (CXP_ABOUT_DIALOG(obj)); return obj; } -static void cxp_about_dialog_instance_init (GTypeInstance * instance, - gpointer g_class) +static void cxp_about_dialog_construct_child (CxpAboutDialog *self) { - CxpAboutDialog *self = CXP_ABOUT_DIALOG (instance); - CxpAboutDialogPrivate *private = CXP_ABOUT_DIALOG_GET_PRIVATE(instance); + CxpAboutDialogPrivate *private = CXP_ABOUT_DIALOG_GET_PRIVATE(self); + GtkWidget *vbox = GTK_DIALOG(self)->vbox; GtkWidget *image; GtkWidget *version_label; GtkWidget *url_label; GtkWidget *copyright_label; GtkWidget *close_button; - - private->dispose_has_run = FALSE; + gchar *version_text; gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE); - gtk_window_set_title (GTK_WINDOW(self), private->title); + gtk_window_set_title (GTK_WINDOW(self), private->appname); + + if (private->image_file != NULL) + { + if (g_file_test (private->image_file, G_FILE_TEST_EXISTS)) + { + image = gtk_image_new_from_file (private->image_file); + gtk_box_pack_start (GTK_BOX(vbox), image, TRUE, TRUE, 0); + gtk_widget_show (image); + } + else + { + g_warning ("Couldn't find pixmap file: %s", private->image_file); + } + } - version_label = gtk_label_new (private->version); - gtk_box_pack_start (GTK_BOX(GTK_DIALOG(self)->vbox), version_label, TRUE, TRUE, 0); - gtk_label_set_justify (GTK_LABEL (version_label), GTK_JUSTIFY_LEFT); - gtk_widget_show (version_label); - gtk_widget_show (GTK_DIALOG(self)->vbox); - - - /* - URLLabel = gtk_label_new (_("http://cxplorer.sourceforge.jp/")); - gtk_box_pack_start (GTK_BOX (vbox2), URLLabel, TRUE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (URLLabel), GTK_JUSTIFY_LEFT); - gtk_widget_show (URLLabel); - label4 = gtk_label_new (_("Copyright 2003-2004 Cxplorer Project")); - gtk_box_pack_start (GTK_BOX (vbox2), label4, TRUE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (label4), GTK_JUSTIFY_LEFT); - gtk_widget_show (label4); - */ + if ((private->appname != NULL) && (private->version != NULL)) + { + version_text = g_strdup_printf ("%s %s", private->appname, private->version); + version_label = gtk_label_new (version_text); + gtk_box_pack_start (GTK_BOX(vbox), version_label, TRUE, TRUE, 0); + gtk_label_set_justify (GTK_LABEL (version_label), GTK_JUSTIFY_LEFT); + gtk_widget_show (version_label); + g_free (version_text); + } + + if (private->url != NULL) + { + url_label = gtk_label_new (private->url); + gtk_box_pack_start (GTK_BOX (vbox), url_label, TRUE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (url_label), GTK_JUSTIFY_LEFT); + gtk_widget_show (url_label); + } + + if (private->copyright != NULL) + { + copyright_label = gtk_label_new (private->copyright); + gtk_box_pack_start (GTK_BOX (vbox), copyright_label, TRUE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (copyright_label), GTK_JUSTIFY_LEFT); + gtk_widget_show (copyright_label); + } close_button = gtk_button_new_from_stock("gtk-close"); gtk_dialog_add_action_widget (GTK_DIALOG (self), close_button, GTK_RESPONSE_CLOSE); @@ -205,7 +237,7 @@ { CxpAboutDialogPrivate *private = CXP_ABOUT_DIALOG_GET_PRIVATE(obj); - g_free (private->title); + g_free (private->appname); g_free (private->version); g_free (private->url); g_free (private->copyright); @@ -231,7 +263,7 @@ sizeof (CxpAboutDialog), 0, /* n_preallocs */ //cxp_about_dialog_instance_init /* instance_init */ - NULL /* instance_init */ + (GInstanceInitFunc) cxp_about_dialog_init /* instance_init */ }; type = g_type_register_static (GTK_TYPE_DIALOG, "CxpAboutDialogType", @@ -240,9 +272,9 @@ return type; } -GtkWidget *cxp_about_dialog_new(const gchar *title, const gchar *version, const gchar *url, const gchar *copyright, const gchar *image_file) +GtkWidget *cxp_about_dialog_new(const gchar *appname, const gchar *version, const gchar *url, const gchar *copyright, const gchar *image_file) { - return GTK_WIDGET(g_object_new(CXP_TYPE_ABOUT_DIALOG, "title", title, "version", version, "url", url, "copyright", copyright, "image_file", image_file, NULL)); + return GTK_WIDGET(g_object_new(CXP_TYPE_ABOUT_DIALOG, "appname", appname, "version", version, "url", url, "copyright", copyright, "image_file", image_file, NULL)); } /* @@ -258,8 +290,8 @@ switch (property_id) { case CXP_ABOUT_DIALOG_APPNAME: - g_free (priv->title); - priv->title = g_value_dup_string (value); + g_free (priv->appname); + priv->appname = g_value_dup_string (value); break; case CXP_ABOUT_DIALOG_VERSION: g_free (priv->version); @@ -293,7 +325,7 @@ switch (property_id) { case CXP_ABOUT_DIALOG_APPNAME: - g_value_set_string (value, priv->title); + g_value_set_string (value, priv->appname); break; case CXP_ABOUT_DIALOG_VERSION: g_value_set_string (value, priv->version);