Skip to content

Commit

Permalink
Merge branch 'search'
Browse files Browse the repository at this point in the history
  • Loading branch information
dmgerman committed May 6, 2012
2 parents 8776d77 + a412e5f commit 717091d
Show file tree
Hide file tree
Showing 11 changed files with 705 additions and 202 deletions.
182 changes: 152 additions & 30 deletions src/eggfindbar.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ struct _EggFindBarPrivate
{
gchar *search_string;

GtkToolItem *hide_button;
GtkToolItem *reset_button;
GtkToolItem *next_button;
GtkToolItem *previous_button;
GtkToolItem *status_separator;
GtkToolItem *status_item;
GtkToolItem *case_button;
GtkToolItem *case_button; // disable for the time being

GtkWidget *find_entry;
GtkWidget *status_label;
Expand Down Expand Up @@ -68,6 +70,9 @@ G_DEFINE_TYPE (EggFindBar, egg_find_bar, GTK_TYPE_TOOLBAR);

enum
{
HIDE_BAR,
SEARCH,
RESET,
NEXT,
PREVIOUS,
CLOSE,
Expand Down Expand Up @@ -99,6 +104,34 @@ egg_find_bar_class_init (EggFindBarClass *klass)

widget_class->grab_focus = egg_find_bar_grab_focus;

find_bar_signals[HIDE_BAR] =
g_signal_new ("hide_bar",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EggFindBarClass, hide_bar),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);


find_bar_signals[SEARCH] =
g_signal_new ("search",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EggFindBarClass, search),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);

find_bar_signals[RESET] =
g_signal_new ("reset",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EggFindBarClass, reset),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);

find_bar_signals[NEXT] =
g_signal_new ("next",
G_OBJECT_CLASS_TYPE (object_class),
Expand Down Expand Up @@ -159,7 +192,7 @@ egg_find_bar_class_init (EggFindBarClass *klass)
g_param_spec_boolean ("case_sensitive",
_("Case sensitive"),
_("TRUE for a case sensitive search"),
FALSE,
TRUE,
G_PARAM_READWRITE));

/* Style properties */
Expand Down Expand Up @@ -204,6 +237,25 @@ egg_find_bar_class_init (EggFindBarClass *klass)
GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
}

static void
egg_find_bar_emit_hide_bar (EggFindBar *find_bar)
{
g_signal_emit (find_bar, find_bar_signals[HIDE_BAR], 0);
}

static void
egg_find_bar_emit_search (EggFindBar *find_bar)
{
g_signal_emit (find_bar, find_bar_signals[SEARCH], 0);
}


static void
egg_find_bar_emit_reset (EggFindBar *find_bar)
{
g_signal_emit (find_bar, find_bar_signals[RESET], 0);
}

static void
egg_find_bar_emit_next (EggFindBar *find_bar)
{
Expand All @@ -216,6 +268,39 @@ egg_find_bar_emit_previous (EggFindBar *find_bar)
g_signal_emit (find_bar, find_bar_signals[PREVIOUS], 0);
}

void egg_find_bar_reset(EggFindBar *find_bar)
{
egg_find_bar_set_search_string(find_bar, "");
egg_find_bar_set_status_text(find_bar, NULL);
egg_find_bar_emit_reset (find_bar);
gtk_widget_set_sensitive (GTK_WIDGET (find_bar->priv->next_button), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (find_bar->priv->previous_button), FALSE);
egg_find_bar_hide(GTK_WIDGET(find_bar));
}

static void
hide_bar_clicked_callback (GtkButton *button,
void *data)
{
EggFindBar *find_bar = EGG_FIND_BAR (data);
/* Set the string to empty... that sets the chain of events */
egg_find_bar_hide(GTK_WIDGET(find_bar));

}



static void
reset_clicked_callback (GtkButton *button,
void *data)
{
EggFindBar *find_bar = EGG_FIND_BAR (data);
/* Set the string to empty... that sets the chain of events */
egg_find_bar_reset(find_bar);

}


static void
next_clicked_callback (GtkButton *button,
void *data)
Expand All @@ -225,6 +310,7 @@ next_clicked_callback (GtkButton *button,
egg_find_bar_emit_next (find_bar);
}


static void
previous_clicked_callback (GtkButton *button,
void *data)
Expand All @@ -251,7 +337,7 @@ entry_activate_callback (GtkEntry *entry,
EggFindBar *find_bar = EGG_FIND_BAR (data);

if (find_bar->priv->search_string != NULL)
egg_find_bar_emit_next (find_bar);
egg_find_bar_emit_search (find_bar);
}

static void
Expand Down Expand Up @@ -296,7 +382,7 @@ static void
egg_find_bar_init (EggFindBar *find_bar)
{
EggFindBarPrivate *priv;
GtkWidget *label;
GtkWidget *labelFind;
GtkWidget *alignment;
GtkWidget *box;
GtkToolItem *item;
Expand All @@ -312,30 +398,43 @@ egg_find_bar_init (EggFindBar *find_bar)

/* Find: |_____| */
item = gtk_tool_item_new ();
box = gtk_hbox_new (FALSE, 12);
box = gtk_hbox_new (FALSE, 10);

alignment = gtk_alignment_new (0.0, 0.5, 1.0, 0.0);
gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 2, 2);

label = gtk_label_new_with_mnemonic (_("Find:"));
labelFind = gtk_label_new_with_mnemonic (_("_Find:"));

priv->find_entry = gtk_entry_new ();
gtk_entry_set_width_chars (GTK_ENTRY (priv->find_entry), 32);
gtk_entry_set_max_length (GTK_ENTRY (priv->find_entry), 512);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), priv->find_entry);
gtk_label_set_mnemonic_widget (GTK_LABEL (labelFind), priv->find_entry);


/* Hide */
priv->hide_button = gtk_tool_button_new (NULL, Q_("Hide"));
gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->hide_button), TRUE);
gtk_tool_item_set_is_important (priv->hide_button, TRUE);
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->hide_button),
_("Hide search bar."));

/* Reset */
priv->reset_button = gtk_tool_button_new (NULL, Q_("Reset"));
gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->reset_button), TRUE);
gtk_tool_item_set_is_important (priv->reset_button, TRUE);
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->reset_button),
_("Reset search and unhighlight current results."));

/* Prev */
arrow = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE);
priv->previous_button = gtk_tool_button_new (arrow, Q_("Find Pre_vious"));
priv->previous_button = gtk_tool_button_new (arrow, Q_("Pre_vious"));
gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->previous_button), TRUE);
gtk_tool_item_set_is_important (priv->previous_button, TRUE);
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->previous_button),
_("Find previous occurrence of the search string"));

/* Next */
arrow = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
priv->next_button = gtk_tool_button_new (arrow, Q_("Find Ne_xt"));
priv->next_button = gtk_tool_button_new (arrow, Q_("Ne_xt"));
gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->next_button), TRUE);
gtk_tool_item_set_is_important (priv->next_button, TRUE);
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->next_button),
Expand All @@ -358,14 +457,21 @@ egg_find_bar_init (EggFindBar *find_bar)
gtk_label_set_ellipsize (GTK_LABEL (priv->status_label),
PANGO_ELLIPSIZE_END);
gtk_misc_set_alignment (GTK_MISC (priv->status_label), 0.0, 0.5);

// gtk_label_set_width_chars(GTK_LABEL (priv->status_label),40);
// gtk_widget_set_size_request (priv->status_label, 100, -1);

g_signal_connect (priv->find_entry, "changed",
G_CALLBACK (entry_changed_callback),
find_bar);
g_signal_connect (priv->find_entry, "activate",
G_CALLBACK (entry_activate_callback),
find_bar);
g_signal_connect (priv->hide_button, "clicked",
G_CALLBACK (hide_bar_clicked_callback),
find_bar);
g_signal_connect (priv->reset_button, "clicked",
G_CALLBACK (reset_clicked_callback),
find_bar);
g_signal_connect (priv->next_button, "clicked",
G_CALLBACK (next_clicked_callback),
find_bar);
Expand All @@ -376,24 +482,26 @@ egg_find_bar_init (EggFindBar *find_bar)
G_CALLBACK (case_sensitive_toggled_callback),
find_bar);

gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (box), labelFind, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (box), priv->find_entry, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (alignment), box);
gtk_container_add (GTK_CONTAINER (item), alignment);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), item, -1);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->hide_button, -1);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->reset_button, -1);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->previous_button, -1);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->next_button, -1);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->case_button, -1);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->status_separator, -1);
gtk_container_add (GTK_CONTAINER (priv->status_item), priv->status_label);
gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->status_item, -1);

/* don't show status separator/label until they are set */

gtk_widget_show_all (GTK_WIDGET (item));
gtk_widget_show_all (GTK_WIDGET (priv->next_button));
gtk_widget_show_all (GTK_WIDGET (priv->previous_button));
gtk_widget_show (priv->status_label);
gtk_widget_show_all (GTK_WIDGET (priv->hide_button));
gtk_widget_show_all (GTK_WIDGET (priv->reset_button));
gtk_widget_show_all (GTK_WIDGET (priv->status_separator));
gtk_widget_show_all (GTK_WIDGET (priv->status_item));
}

static void
Expand Down Expand Up @@ -459,6 +567,9 @@ egg_find_bar_show (GtkWidget *widget)
EggFindBarPrivate *priv = bar->priv;

GTK_WIDGET_CLASS (egg_find_bar_parent_class)->show (widget);

egg_find_bar_grab_focus(widget);


if (priv->set_focus_handler == 0)
{
Expand Down Expand Up @@ -499,8 +610,21 @@ egg_find_bar_grab_focus (GtkWidget *widget)
EggFindBarPrivate *priv = find_bar->priv;

gtk_widget_grab_focus (priv->find_entry);

}

gboolean
egg_find_bar_has_focus (GtkWidget *widget)
{
EggFindBar *find_bar = EGG_FIND_BAR (widget);
EggFindBarPrivate *priv = find_bar->priv;

return gtk_widget_has_focus (priv->find_entry);

}



/**
* egg_find_bar_new:
*
Expand Down Expand Up @@ -574,8 +698,7 @@ egg_find_bar_set_search_string (EggFindBar *find_bar,
gtk_widget_set_sensitive (GTK_WIDGET (find_bar->priv->next_button), not_empty);
gtk_widget_set_sensitive (GTK_WIDGET (find_bar->priv->previous_button), not_empty);

g_object_notify (G_OBJECT (find_bar),
"search_string");
g_object_notify (G_OBJECT (find_bar), "search_string");
}
}

Expand Down Expand Up @@ -625,17 +748,16 @@ egg_find_bar_set_case_sensitive (EggFindBar *find_bar,

case_sensitive = case_sensitive != FALSE;

if (priv->case_sensitive != case_sensitive)
{
priv->case_sensitive = case_sensitive;

gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->case_button),
priv->case_sensitive);

g_object_notify (G_OBJECT (find_bar),
"case_sensitive");
}

if (priv->case_sensitive != case_sensitive) {
priv->case_sensitive = case_sensitive;

gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->case_button),
priv->case_sensitive);

g_object_notify (G_OBJECT (find_bar),
"case_sensitive");
}

g_object_thaw_notify (G_OBJECT (find_bar));
}

Expand Down Expand Up @@ -734,7 +856,7 @@ egg_find_bar_set_status_text (EggFindBar *find_bar,
g_return_if_fail (EGG_IS_FIND_BAR (find_bar));

priv = (EggFindBarPrivate *)find_bar->priv;

gtk_label_set_text (GTK_LABEL (priv->status_label), text);
g_object_set (priv->status_separator, "visible", text != NULL && *text != '\0', NULL);
g_object_set (priv->status_item, "visible", text != NULL && *text !='\0', NULL);
Expand Down
9 changes: 9 additions & 0 deletions src/eggfindbar.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ struct _EggFindBarClass
{
GtkToolbarClass parent_class;

void (* hide_bar) (EggFindBar *find_bar);
void (* search) (EggFindBar *find_bar);
void (* reset) (EggFindBar *find_bar);
void (* next) (EggFindBar *find_bar);
void (* previous) (EggFindBar *find_bar);
void (* close) (EggFindBar *find_bar);
Expand Down Expand Up @@ -74,6 +77,12 @@ void egg_find_bar_get_current_match_color (EggFindBar *find_bar,
void egg_find_bar_set_status_text (EggFindBar *find_bar,
const char *text);

void egg_find_bar_reset(EggFindBar *find_bar);

gboolean
egg_find_bar_has_focus (GtkWidget *widget);


G_END_DECLS

#endif /* __EGG_FIND_BAR_H__ */
Expand Down
2 changes: 1 addition & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ void init_stuff (int argc, char *argv[])
GdkScreen *screen;
int i, j;
struct Brush *b;
gboolean can_xinput, success = 0;
gboolean can_xinput = FALSE, success = FALSE;
gchar *tmppath, *tmpfn;
GError *error = NULL;
GOptionContext *context;
Expand Down
Loading

0 comments on commit 717091d

Please sign in to comment.