+#include "config.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
+#include <glib/gstdio.h>
-#include <demos.h>
+#include "demos.h"
static GtkTextBuffer *info_buffer;
static GtkTextBuffer *source_buffer;
TITLE_COLUMN,
FILENAME_COLUMN,
FUNC_COLUMN,
- ITALIC_COLUMN,
+ STYLE_COLUMN,
NUM_COLUMNS
};
GtkTreePath *path;
};
+#ifdef G_OS_WIN32
+
+#undef DEMOCODEDIR
+
+static char *
+get_democodedir (void)
+{
+ static char *result = NULL;
+
+ if (result == NULL)
+ {
+ result = g_win32_get_package_installation_directory_of_module (NULL);
+ if (result == NULL)
+ result = "unknown-location";
+
+ result = g_strconcat (result, "\\share\\gtk-2.0\\demo", NULL);
+ }
+
+ return result;
+}
+
+#define DEMOCODEDIR get_democodedir ()
+
+#endif
+
/**
* demo_find_file:
* @base: base filename
demo_find_file (const char *base,
GError **err)
{
- g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
- if (g_file_test (base, G_FILE_TEST_EXISTS))
+ if (g_file_test ("gtk-logo-rgb.gif", G_FILE_TEST_EXISTS) &&
+ g_file_test (base, G_FILE_TEST_EXISTS))
return g_strdup (base);
else
{
{
CallbackData *cbdata = data;
GtkTreeIter iter;
- gboolean italic;
+ PangoStyle style;
gtk_tree_model_get_iter (cbdata->model, &iter, cbdata->path);
gtk_tree_model_get (GTK_TREE_MODEL (cbdata->model), &iter,
- ITALIC_COLUMN, &italic,
+ STYLE_COLUMN, &style,
-1);
- if (italic)
+ if (style == PANGO_STYLE_ITALIC)
gtk_tree_store_set (GTK_TREE_STORE (cbdata->model), &iter,
- ITALIC_COLUMN, !italic,
+ STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
gtk_tree_path_free (cbdata->path);
{
int n_read = 0;
-#ifndef G_OS_WIN32
+#ifdef HAVE_FLOCKFILE
flockfile (stream);
#endif
{
int c;
-#ifndef G_OS_WIN32
+#ifdef HAVE_FLOCKFILE
c = getc_unlocked (stream);
#else
c = getc (stream);
case '\r':
case '\n':
{
-#ifndef G_OS_WIN32
+#ifdef HAVE_FLOCKFILE
int next_c = getc_unlocked (stream);
#else
int next_c = getc (stream);
done:
-#ifndef G_OS_WIN32
+#ifdef HAVE_FLOCKFILE
funlockfile (stream);
#endif
*/
enum {
STATE_NORMAL,
- STATE_IN_COMMENT,
+ STATE_IN_COMMENT
};
static gchar *tokens[] =
"const ",
"void",
"gint",
- "int ",
- "char ",
+ " int ",
+ " char ",
"gchar ",
"gfloat",
"float",
+ "double",
"gint8",
"gint16",
"gint32",
"FALSE",
"TRUE",
"FILE ",
- "GtkObject ",
"GtkColorSelection ",
"GtkWidget ",
"GtkButton ",
"GdkPixbuf ",
"GError",
"size_t",
+ "GtkAboutDialog ",
+ "GtkAction ",
+ "GtkActionEntry ",
+ "GtkRadioActionEntry ",
+ "GtkIconFactory ",
+ "GtkStockItem ",
+ "GtkIconSet ",
+ "GtkTextBuffer ",
+ "GtkStatusbar ",
+ "GtkTextIter ",
+ "GtkTextMark ",
+ "GdkEventWindowState ",
+ "GtkActionGroup ",
+ "GtkUIManager ",
+ "GtkRadioAction ",
+ "GtkActionClass ",
+ "GtkToggleActionEntry ",
+ "GtkAssistant ",
+ "GtkBuilder ",
+ "GtkSizeGroup ",
+ "GtkTreeModel ",
+ "GtkTreeSelection ",
+ "GdkDisplay ",
+ "GdkScreen ",
+ "GdkWindow ",
+ "GdkEventButton ",
+ "GdkCursor ",
+ "GtkTreeIter ",
+ "GtkTreeViewColumn ",
+ "GdkDisplayManager ",
+ "GtkClipboard ",
+ "GtkIconSize ",
+ "GtkImage ",
+ "GdkDragContext ",
+ "GtkSelectionData ",
+ "GtkDialog ",
+ "GtkMenuItem ",
+ "GtkListStore ",
+ "GtkCellLayout ",
+ "GtkCellRenderer ",
+ "GtkTreePath ",
+ "GtkTreeStore ",
+ "GtkEntry ",
+ "GtkEditable ",
+ "GtkEditableInterface ",
+ "GdkPixmap ",
+ "GdkEventConfigure ",
+ "GdkEventMotion ",
+ "GdkModifierType ",
+ "GtkEntryCompletion ",
+ "GtkToolItem ",
+ "GDir ",
+ "GtkIconView ",
+ "GtkCellRendererText ",
+ "GtkContainer ",
+ "GtkAccelGroup ",
+ "GtkPaned ",
+ "GtkPrintOperation ",
+ "GtkPrintContext ",
+ "cairo_t ",
+ "PangoLayout "
+ "PangoFontDescription ",
+ "PangoRenderer ",
+ "PangoMatrix ",
+ "PangoContext ",
+ "PangoLayout ",
+ "GtkTable ",
+ "GtkToggleButton ",
+ "GString ",
+ "GtkIconSize ",
+ "GtkTreeView ",
+ "GtkTextTag ",
+ "GdkEvent ",
+ "GdkEventKey ",
+ "GtkTextView ",
+ "GdkEventVisibility ",
+ "GdkBitmap ",
+ "GtkTextChildAnchor ",
+ "GArray ",
+ "GtkCellEditable ",
+ "GtkCellRendererToggle ",
NULL
};
}
/* check for types */
for (i = 0; types[i] != NULL; i++)
- if (!strncmp (text, types[i], strlen (types[i])))
+ if (!strncmp (text, types[i], strlen (types[i])) ||
+ (start && types[i][0] == ' ' && !strncmp (text, types[i] + 1, strlen (types[i]) - 1)))
{
*end_ptr = text + strlen (types[i]);
*tag = "type";
/* While not as cool as c-mode, this will do as a quick attempt at highlighting */
static void
-fontify ()
+fontify (void)
{
GtkTextIter start_iter, next_iter, tmp_iter;
gint state;
return;
}
- file = fopen (full_filename, "r");
+ file = g_fopen (full_filename, "r");
if (!file)
g_warning ("Cannot open %s: %s\n", full_filename, g_strerror (errno));
}
}
+ fclose (file);
+
fontify ();
g_string_free (buffer, TRUE);
GtkTreeViewColumn *column)
{
GtkTreeIter iter;
- gboolean italic;
+ PangoStyle style;
GDoDemoFunc func;
GtkWidget *window;
GtkTreeModel *model;
gtk_tree_model_get (GTK_TREE_MODEL (model),
&iter,
FUNC_COLUMN, &func,
- ITALIC_COLUMN, &italic,
+ STYLE_COLUMN, &style,
-1);
if (func)
{
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
- ITALIC_COLUMN, !italic,
+ STYLE_COLUMN, (style == PANGO_STYLE_ITALIC ? PANGO_STYLE_NORMAL : PANGO_STYLE_ITALIC),
-1);
- window = (func) ();
+ window = (func) (gtk_widget_get_toplevel (GTK_WIDGET (tree_view)));
if (window != NULL)
{
if (is_source)
{
- font_desc = pango_font_description_from_string ("Courier 12");
+ font_desc = pango_font_description_from_string ("monospace");
gtk_widget_modify_font (text_view, font_desc);
pango_font_description_free (font_desc);
GtkTreeViewColumn *column;
GtkTreeStore *model;
GtkTreeIter iter;
+ GtkWidget *box, *label, *scrolled_window;
Demo *d = testgtk_demos;
- model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+ model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_INT);
tree_view = gtk_tree_view_new ();
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
TITLE_COLUMN, d->title,
FILENAME_COLUMN, d->filename,
FUNC_COLUMN, d->func,
- ITALIC_COLUMN, FALSE,
+ STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
d++;
TITLE_COLUMN, children->title,
FILENAME_COLUMN, children->filename,
FUNC_COLUMN, children->func,
- ITALIC_COLUMN, FALSE,
+ STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
children++;
cell = gtk_cell_renderer_text_new ();
- g_object_set (G_OBJECT (cell),
- "style", PANGO_STYLE_ITALIC,
- NULL);
-
column = gtk_tree_view_column_new_with_attributes ("Widget (double click for demo)",
cell,
"text", TITLE_COLUMN,
- "style_set", ITALIC_COLUMN,
+ "style", STYLE_COLUMN,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
GTK_TREE_VIEW_COLUMN (column));
+ gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
+ gtk_tree_selection_select_iter (GTK_TREE_SELECTION (selection), &iter);
+
g_signal_connect (selection, "changed", G_CALLBACK (selection_cb), model);
g_signal_connect (tree_view, "row_activated", G_CALLBACK (row_activated_cb), model);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
- return tree_view;
+ gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
+
+ scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
+
+ label = gtk_label_new ("Widget (double click for demo)");
+
+ box = gtk_notebook_new ();
+ gtk_notebook_append_page (GTK_NOTEBOOK (box), scrolled_window, label);
+
+ gtk_widget_grab_focus (tree_view);
+
+ g_object_unref (model);
+
+ return box;
}
static void
list = g_list_append (list, transparent);
gtk_window_set_default_icon_list (list);
g_list_free (list);
- g_object_unref (G_OBJECT (pixbuf));
- g_object_unref (G_OBJECT (transparent));
+ g_object_unref (pixbuf);
+ g_object_unref (transparent);
}
}
* these few lines, which are just a hack so gtk-demo will work
* in the GTK tree without installing it.
*/
- if (g_file_test ("../../gdk-pixbuf/.libs/libpixbufloader-pnm.so",
+ if (g_file_test ("../../gdk-pixbuf/libpixbufloader-pnm.la",
G_FILE_TEST_EXISTS))
{
- putenv ("GDK_PIXBUF_MODULEDIR=../../gdk-pixbuf/.libs");
- putenv ("GTK_IM_MODULE_FILE=../../modules/input/gtk.immodules");
+ g_setenv ("GDK_PIXBUF_MODULE_FILE", "../../gdk-pixbuf/loaders.cache", TRUE);
+ g_setenv ("GTK_IM_MODULE_FILE", "../../modules/input/immodules.cache", TRUE);
}
/* -- End of hack -- */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "GTK+ Code Demos");
- g_signal_connect (window, "destroy",
+ g_signal_connect_after (window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
- hbox = gtk_hbox_new (FALSE, 0);
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), hbox);
tree = create_tree ();
create_text (&info_buffer, FALSE),
gtk_label_new_with_mnemonic ("_Info"));
+ tag = gtk_text_buffer_create_tag (info_buffer, "title",
+ "font", "Sans 18",
+ NULL);
+ g_object_unref (info_buffer);
+
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
create_text (&source_buffer, TRUE),
gtk_label_new_with_mnemonic ("_Source"));
- tag = gtk_text_buffer_create_tag (info_buffer, "title",
- "font", "Sans 18",
- NULL);
tag = gtk_text_buffer_create_tag (source_buffer, "comment",
- "foreground", "red",
+ "foreground", "DodgerBlue",
NULL);
tag = gtk_text_buffer_create_tag (source_buffer, "type",
"foreground", "ForestGreen",
"weight", PANGO_WEIGHT_BOLD,
"foreground", "DarkGoldenrod4",
NULL);
+ g_object_unref (source_buffer);
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
gtk_widget_show_all (window);