}
static void
-chimara_glk_finalize(GObject *object)
+chimara_glk_free_private_data(ChimaraGlk *self)
{
- ChimaraGlk *self = CHIMARA_GLK(object);
ChimaraGlkPrivate *priv = CHIMARA_GLK_PRIVATE(self);
-
+
/* Free the event queue */
g_mutex_lock(priv->event_lock);
g_queue_foreach(priv->event_queue, (GFunc)g_free, NULL);
g_async_queue_unref(priv->char_input_queue);
g_async_queue_unref(priv->line_input_queue);
- /* Free private data */
+ /* Free styles */
pango_font_description_free(priv->default_font_desc);
pango_font_description_free(priv->monospace_font_desc);
+
g_free(priv->current_dir);
g_hash_table_destroy(priv->default_styles->text_buffer);
g_hash_table_destroy(priv->default_styles->text_grid);
g_hash_table_destroy(priv->current_styles->text_buffer);
g_hash_table_destroy(priv->current_styles->text_grid);
+}
+static void
+chimara_glk_finalize(GObject *object)
+{
+ ChimaraGlk *self = CHIMARA_GLK(object);
+ chimara_glk_free_private_data(self);
+
G_OBJECT_CLASS(chimara_glk_parent_class)->finalize(object);
}
+/**
+ * chimara_glk_reset:
+ * Resets the widget back to it's origional state. IE: it resets all the private data.
+ * @param self: The ChimaraGLK widget to reset
+ */
+void
+chimara_glk_reset(ChimaraGlk *self)
+{
+ chimara_glk_free_private_data(self);
+ chimara_glk_init(self);
+}
+
+
/* Internal function: Recursively get the Glk window tree's size request */
static void
request_recurse(winid_t win, GtkRequisition *requisition, guint spacing)
chimara_glk_stopped(ChimaraGlk *self)
{
CHIMARA_GLK_USE_PRIVATE(self, priv);
+ printf("stopped signal received\n");
priv->running = FALSE;
/* Free the plugin */
chimara_glk_started(ChimaraGlk *self)
{
CHIMARA_GLK_USE_PRIVATE(self, priv);
+ printf("started signal received\n");
priv->running = TRUE;
}
/* Run main function */
g_signal_emit_by_name(startup->glk_data->self, "started");
+ /* FIXME: hack. should be done by the signal above but for some reason
+ * this doesn't work */
+ chimara_glk_started(startup->glk_data->self);
+
(startup->glk_main)();
+
g_signal_emit_by_name(startup->glk_data->self, "stopped");
+ /* FIXME: hack. should be done by the signal above but for some reason
+ * this doesn't work */
+ chimara_glk_stopped(startup->glk_data->self);
+
g_slice_free(struct StartupData, startup);
return NULL;
}
{
g_return_if_fail(glk || CHIMARA_IS_GLK(glk));
CHIMARA_GLK_USE_PRIVATE(glk, priv);
+
+ printf("stopping (%d)...\n", priv->running);
/* Don't do anything if not running a program */
if(!priv->running)
return;
style_init()
{
ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
- GHashTable *default_text_grid_styles = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
- GHashTable *default_text_buffer_styles = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
- GHashTable *current_text_grid_styles = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
- GHashTable *current_text_buffer_styles = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
+ GHashTable *default_text_grid_styles = g_hash_table_new(g_str_hash, g_str_equal);
+ GHashTable *default_text_buffer_styles = g_hash_table_new(g_str_hash, g_str_equal);
+ GHashTable *current_text_grid_styles = g_hash_table_new(g_str_hash, g_str_equal);
+ GHashTable *current_text_buffer_styles = g_hash_table_new(g_str_hash, g_str_equal);
GtkTextTag *tag;
/* Create the CSS file scanner */