コード例 #1
0
static void
garu_effects_equalizer_combo_box_changed (GtkComboBox *widget,
                                          GaruEffects *self)
{
  GSList *l;
  gchar  *band;
  int     active, i;
  active = gtk_combo_box_get_active (widget);
  g_settings_set_int (self->settings,"equalizer-preset", active);
  equalizer_custom_selected = (active == G_N_ELEMENTS (eq_presets) - 1);
  equalizer_changed_by_combo_box = TRUE;
  for (l = self->eq_scales; l != NULL; l = l->next)
    {
      i = g_slist_position (self->eq_scales, l);
      /* If custom preset is activated */
      if (equalizer_custom_selected)
        {
          band = g_strdup_printf ("eq-custom-band%d", i);
          gtk_range_set_value (GTK_RANGE (l->data),
                               g_settings_get_double (self->settings, band));
          g_free (band);
        }
      else
        {
          gtk_range_set_value (GTK_RANGE (l->data),
                               eq_presets_values[active][i]);
        }
    }
  equalizer_changed_by_combo_box = FALSE;
}
コード例 #2
0
void
grg_recent_dox_push (const guchar * file)
{
	GSList *cur, *tmp;

	if (file == NULL)
		return;

	tmp = grg_recent_dox;
	while (tmp)
	{
		cur = tmp;
		tmp = tmp->next;
		if (STR_EQ (cur->data, file) ||
		    (g_slist_position (grg_recent_dox, cur) >=
		     GRG_RECENT_LIMIT - 1))
		{
			grg_recent_dox =
				g_slist_remove_link (grg_recent_dox, cur);
			g_free (cur->data);
			g_slist_free_1 (cur);
		}
	}

	grg_recent_dox =
		g_slist_prepend (grg_recent_dox, g_strdup ((guchar *) file));

	recent_dox_save ();
	grg_menu_update ();
}
コード例 #3
0
ファイル: tape.c プロジェクト: AndersAtEndian/PocketClive
static libspectrum_error
jump_blocks( libspectrum_tape *tape, int offset )
{
  gint current_position; GSList *new_block;

  current_position = g_slist_position( tape->blocks, tape->current_block );
  if( current_position == -1 ) return LIBSPECTRUM_ERROR_LOGIC;

  new_block = g_slist_nth( tape->blocks, current_position + offset );
  if( new_block == NULL ) return LIBSPECTRUM_ERROR_CORRUPT;

  tape->current_block = new_block;

  return LIBSPECTRUM_ERROR_NONE;
}
コード例 #4
0
ファイル: tape.c プロジェクト: RoestVrijStaal/xpectrum
/* Get the position on the tape of the current block */
libspectrum_error
libspectrum_tape_position( int *n, libspectrum_tape *tape )
{
  *n = g_slist_position( tape->blocks, tape->state.current_block );

  if( *n == -1 ) {
    libspectrum_print_error(
      LIBSPECTRUM_ERROR_LOGIC,
      "libspectrum_tape_position: current block is not in tape!"
    );
    return LIBSPECTRUM_ERROR_LOGIC;
  }

  return LIBSPECTRUM_ERROR_NONE;
}
コード例 #5
0
ファイル: clist.c プロジェクト: CraneMTG/ScrapWars-2
void gtk_clist_sort(GtkCList *clist)
{
  HWND hWnd;
  gint rowind;
  GList *sel;
  GSList *rowpt;

  sorting_clist = clist;
  if (clist && clist->cmp_func && clist->rows) {
    /* Since the order of the list may change, we need to change the
     * selection as well. Do this by converting the row indices into
     * GSList pointers (which are invariant to the sort) and then convert
     * back afterwards */
    for (sel = clist->selection; sel; sel = g_list_next(sel)) {
      rowind = GPOINTER_TO_INT(sel->data);
      sel->data = (gpointer)g_slist_nth(clist->rowdata, rowind);
    }
    clist->rowdata = g_slist_sort(clist->rowdata, gtk_clist_sort_func);
    for (sel = clist->selection; sel; sel = g_list_next(sel)) {
      rowpt = (GSList *)(sel->data);
      sel->data = GINT_TO_POINTER(g_slist_position(clist->rowdata, rowpt));
    }
    if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) {
      hWnd = GTK_WIDGET(clist)->hWnd;
      if (clist->mode == GTK_SELECTION_SINGLE) {
        sel = clist->selection;
        if (sel)
          rowind = GPOINTER_TO_INT(sel->data);
        else
          rowind = -1;
        SendMessage(hWnd, LB_SETCURSEL, (WPARAM)rowind, 0);
      } else {
        for (rowind = 0; rowind < clist->rows; rowind++) {
          SendMessage(hWnd, LB_SETSEL, (WPARAM)FALSE, (LPARAM)rowind);
        }
        for (sel = clist->selection; sel; sel = g_list_next(sel)) {
          rowind = GPOINTER_TO_INT(sel->data);
          SendMessage(hWnd, LB_SETSEL, (WPARAM)TRUE, (LPARAM)rowind);
        }
      }
      InvalidateRect(hWnd, NULL, FALSE);
      UpdateWindow(hWnd);
    }
  }
}
コード例 #6
0
ファイル: search_cb.c プロジェクト: MrJoe/gtk-gnutella
/**
 * Queue a bitzi queries from the search context menu
 */
void
on_popup_search_metadata_activate(GtkMenuItem *unused_menuitem,
	gpointer unused_udata)
{
    GList *node_list;
	GSList *data_list;
    search_t *search;
	guint32 bitzi_debug;

	(void) unused_menuitem;
	(void) unused_udata;

    search = search_gui_get_current_search();
    g_assert(search != NULL);

    gtk_clist_freeze(GTK_CLIST(search->tree));

	node_list = g_list_copy(GTK_CLIST(search->tree)->selection);
	data_list = search_cb_collect_ctree_data(GTK_CTREE(search->tree),
					node_list, gui_record_sha1_eq);

	/* Make sure the column is actually visible. */
	{
		static const gint min_width = 80;
		GtkCList *clist = GTK_CLIST(search->tree);

    	gtk_clist_set_column_visibility(clist, c_sr_meta, TRUE);
		if (clist->column[c_sr_meta].width < min_width)
    		gtk_clist_set_column_width(clist, c_sr_meta, min_width);
	}
	
	/* Queue up our requests */
    gnet_prop_get_guint32_val(PROP_BITZI_DEBUG, &bitzi_debug);
	if (bitzi_debug > 10)
		g_debug("on_popup_search_metadata_activate: %d items, %p",
			  g_slist_position(data_list, g_slist_last(data_list)) + 1,
			  cast_to_gconstpointer(data_list));

	G_SLIST_FOREACH(data_list, search_gui_queue_bitzi_by_sha1);

	gtk_clist_thaw(GTK_CLIST(search->tree));
	g_slist_free(data_list);
	g_list_free(node_list);
}
コード例 #7
0
static void register_connections_stored(const char *adapter)
{
	char filename[PATH_MAX + 1];
	char *pattern;
	struct stat st;
	GSList *list;
	bdaddr_t src;
	bdaddr_t default_src;
	int dev_id;

	create_name(filename, PATH_MAX, STORAGEDIR, adapter, "network");

	str2ba(adapter, &src);

	if (stat(filename, &st) < 0)
		return;

	if (!(st.st_mode & __S_IFREG))
		return;

	textfile_foreach(filename, parse_stored_connection, &src);

	/* Check default connection for current default adapter */
	bacpy(&default_src, BDADDR_ANY);
	dev_id = hci_get_route(&default_src);
	if (dev_id < 0 || hci_devba(dev_id, &default_src) < 0)
		return;

	if (bacmp(&default_src, &src) != 0)
		return;

	pattern = textfile_get(filename, "default");
	if (!pattern)
		return;

	list = find_connection_pattern(connection, pattern);
	if (!list)
		return;
	default_index = g_slist_position(connection_paths, list);
}
コード例 #8
0
static DBusMessage *change_default_connection(DBusConnection *conn,
						DBusMessage *msg, void *data)
{
	const char *path;
	const char *pattern;
	GSList *list;

	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &pattern,
						DBUS_TYPE_INVALID) == FALSE)
		return NULL;

	if (connection_paths == NULL ||
				g_slist_length(connection_paths) == 0)
		return does_not_exist(msg);

	list = g_slist_find_custom(connection_paths, pattern,
						(GCompareFunc) strcmp);

	/* Find object path via pattern */
	if (list == NULL) {
		list = find_connection_pattern(conn, pattern);
		if (list == NULL)
			return does_not_exist(msg);

		path = list->data;
	} else
		path = list->data;

	default_index = g_slist_position(connection_paths, list);
	connection_store(path, TRUE);

	g_dbus_emit_signal(connection, NETWORK_PATH,
					NETWORK_MANAGER_INTERFACE,
					"DefaultConnectionChanged",
					DBUS_TYPE_STRING, &path,
					DBUS_TYPE_INVALID);

	return g_dbus_create_reply(msg, DBUS_TYPE_STRING, &path,
							DBUS_TYPE_INVALID);
}
コード例 #9
0
ファイル: gnac-profiles-manager.c プロジェクト: GNOME/gnac
void
gnac_profiles_mgr_list_profiles(void)
{
  GFile *dir = gnac_profiles_mgr_get_profiles_dir();

  GError *error = NULL;
  GFileEnumerator *files = g_file_enumerate_children(dir,
      G_FILE_ATTRIBUTE_STANDARD_NAME ","
      G_FILE_ATTRIBUTE_STANDARD_TYPE,
      G_FILE_QUERY_INFO_NONE, NULL, &error);

  if (!files && error) {
    g_clear_error(&error);
    /* no profiles found, try to import the default ones */
    gnac_profiles_mgr_import_default_profiles();
    files = g_file_enumerate_children(dir,
        G_FILE_ATTRIBUTE_STANDARD_NAME ","
        G_FILE_ATTRIBUTE_STANDARD_TYPE,
        G_FILE_QUERY_INFO_NONE, NULL, &error);
    if (!files && error) {
      g_printerr(_("No profiles available"));
      libgnac_warning("%s", error->message);
      g_clear_error(&error);
      return;
    }
  }

  g_print(_("Available audio profiles:"));
  g_print("\n\n");

  gchar *last_used_profile = gnac_settings_get_string(
      GNAC_KEY_LAST_USED_PROFILE);

  GFile *profile_file = g_file_enumerator_get_container(files);
  gchar *profile_file_path = g_file_get_path(profile_file);

  GFileInfo *file_info;
  GSList *profiles = NULL;

  while ((file_info = g_file_enumerator_next_file(files, NULL, NULL))) {
    if (g_file_info_get_file_type(file_info) == G_FILE_TYPE_REGULAR) {
      AudioProfileGeneric *profile;
      const gchar *profile_file_name = g_file_info_get_name(file_info);
      gchar *profile_file_full_path = g_build_filename(profile_file_path,
          profile_file_name, NULL);
      gnac_profiles_default_load_generic_audio_profile(profile_file_full_path,
          &profile);
      if (profile) {
        gpointer name = (profile->generic)->name;
        profiles = g_slist_prepend(profiles, name);
      }

      g_free(profile_file_full_path);
    }

    g_object_unref(file_info);
  }

  g_free(profile_file_path);

  profiles = g_slist_reverse(profiles);

  guint count = g_slist_length(profiles);
  if (count == 0) {
    g_print("\t");
    g_print(_("No profiles available"));
    g_print("\n");
  } else {
    /* check if last_used_profile exists */
    if (!g_slist_find_custom(profiles, last_used_profile,
        (GCompareFunc) g_strcmp0))
    {
      last_used_profile = NULL;
    }

    GSList *tmp;
    for (tmp = profiles; tmp; tmp = g_slist_next(tmp)) {
      gint pos = g_slist_position(profiles, tmp);
      gchar *count_str = g_strdup_printf("%u", pos+1);
      /* if last_used_profile is not set, assume the
       * first profile was last used */
      gchar *name = tmp->data;
      gboolean found = ((pos == 0 && !last_used_profile)
          || gnac_utils_str_equal(name, last_used_profile));
      g_print("\t%2s) %s\n", found ? "*" : count_str, name);
      g_free(count_str);
    }
  }

  g_print("\n");

  g_slist_free(profiles);
  g_free(last_used_profile);
  g_object_unref(dir);
  g_file_enumerator_close(files, NULL, NULL);
  g_object_unref(files);
}
コード例 #10
0
ファイル: gui_dialogs.c プロジェクト: krzyzanowskim/GNUGadu
GtkWidget *gui_build_dialog_gtk_table(GSList * list, gint cols, gboolean use_progress)
{
    GSList *listtmp = list;
    GtkWidget *adv_vbox = NULL;
    GtkWidget *adv_expander = NULL;
    gint ielements = g_slist_position(list, g_slist_last(list));
    gint rows = ((ielements + 1) / cols) + use_progress;
    GtkWidget *tab = gtk_table_new(rows, cols, FALSE);
    gint actC = 0, actR = 0;
    GtkWidget *to_grab_focus = NULL;
    gboolean need_advanced = FALSE;

    gtk_container_set_border_width(GTK_CONTAINER(tab), 15);

    /* remember to free adv_expander */

    adv_vbox = gtk_vbox_new(FALSE, 5);

    while (listtmp)
    {
        GGaduKeyValue *kv = (GGaduKeyValue *) listtmp->data;
        GtkWidget *entry = NULL;
        gboolean need_label = TRUE;
        gboolean is_advanced = FALSE;

        switch (kv->type)
        {
        case VAR_STR:
            entry = gtk_entry_new();
            if (kv->value)
                gtk_entry_set_text(GTK_ENTRY(entry), g_strdup(kv->value));

            gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
            break;
        case VAR_INT:
        {
            entry = gtk_spin_button_new_with_range(0, 999999999, 1);
            gtk_spin_button_set_value(GTK_SPIN_BUTTON(entry), (gint) kv->value);
            gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
        }
        break;
        case VAR_INT_WITH_NEGATIVE:
        {
            entry = gtk_spin_button_new_with_range(-999999999, 999999999, 1);
            gtk_spin_button_set_value(GTK_SPIN_BUTTON(entry), (gint) kv->value);
            gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
        }
        break;
        case VAR_BOOL:
            need_label = FALSE;
            entry = gtk_check_button_new_with_mnemonic(kv->description);
            if (kv->value)
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(entry), TRUE);
            break;
        case VAR_FILE_CHOOSER:
        {
            GtkWidget *txt_entry = NULL;
            GtkWidget *button_entry = NULL;

            entry = gtk_hbox_new(FALSE, 2);

            txt_entry = gtk_entry_new();
            if (kv->value)
                gtk_entry_set_text(GTK_ENTRY(txt_entry), g_strdup(kv->value));

            g_object_set_data(G_OBJECT(txt_entry), "kv", kv);
            g_object_set_data(G_OBJECT(entry), "txt_entry", txt_entry);

            button_entry = gtk_button_new_from_stock("gtk-open");

            gtk_box_pack_start_defaults(GTK_BOX(entry), txt_entry);
            gtk_box_pack_start_defaults(GTK_BOX(entry), button_entry);

            g_signal_connect_swapped(button_entry, "clicked", G_CALLBACK(gui_dialog_show_filename), txt_entry);
        }
        break;
        case VAR_FONT_CHOOSER:
        {
            GtkWidget *txt_entry = NULL;
            GtkWidget *button_entry = NULL;

            entry = gtk_hbox_new(FALSE, 2);

            txt_entry = gtk_entry_new();
            if (kv->value)
                gtk_entry_set_text(GTK_ENTRY(txt_entry), g_strdup(kv->value));

            g_object_set_data(G_OBJECT(txt_entry), "kv", kv);
            g_object_set_data(G_OBJECT(entry), "txt_entry", txt_entry);

            button_entry = gtk_button_new_from_stock("gtk-select-font");

            gtk_box_pack_start_defaults(GTK_BOX(entry), txt_entry);
            gtk_box_pack_start_defaults(GTK_BOX(entry), button_entry);

            g_signal_connect_swapped(button_entry, "clicked", G_CALLBACK(gui_dialog_show_fontchooser), txt_entry);
        }
        break;
        case VAR_COLOUR_CHOOSER:
        {
            GtkWidget *txt_entry = NULL;
            GtkWidget *button_entry = NULL;
            GdkColor color;

            entry = gtk_hbox_new(FALSE, 2);

            txt_entry = gtk_entry_new();
            if (kv->value)
                gtk_entry_set_text(GTK_ENTRY(txt_entry), g_strdup(kv->value));

            gdk_color_parse(gtk_entry_get_text(GTK_ENTRY(txt_entry)), &color);

            g_object_set_data(G_OBJECT(txt_entry), "kv", kv);
            g_object_set_data(G_OBJECT(entry), "txt_entry", txt_entry);

            button_entry = gtk_color_button_new_with_color(&color);

            gtk_box_pack_start_defaults(GTK_BOX(entry), txt_entry);
            gtk_box_pack_start_defaults(GTK_BOX(entry), button_entry);

            g_signal_connect(G_OBJECT(button_entry), "color-set", G_CALLBACK(gui_dialog_show_colorchooser), txt_entry);
        }
        break;
        case VAR_IMG:
            need_label = FALSE;
            entry = gtk_image_new_from_file(kv->value);
            gtk_table_set_homogeneous(GTK_TABLE(tab), FALSE);
            break;
        case VAR_LIST:
        {
            GSList *selected = g_slist_nth((GSList *) kv->value, 0);
            GSList *restlist = g_slist_nth((GSList *) kv->value, 1);
            gint selected_index = 0;
            gint i = -1;

            entry = gtk_combo_box_new_text();

            g_object_set_data(G_OBJECT(entry), "options-list", restlist);
            while (restlist)
            {
                i++;
                if (!g_strcasecmp(selected->data, restlist->data))
                {
                    selected_index = i;
                    print_debug("############# %d %s", selected_index, selected->data);
                }
                gtk_combo_box_append_text(GTK_COMBO_BOX(entry), g_strdup(restlist->data));
                restlist = restlist->next;
            }
            gtk_combo_box_set_active(GTK_COMBO_BOX(entry), selected_index);
        }
        break;
        default:
            break;
        }

        if ((kv->flag & VAR_FLAG_SENSITIVE) != 0)
        {
            gtk_widget_set_sensitive(GTK_WIDGET(entry), TRUE);
            gtk_editable_set_editable(GTK_EDITABLE(entry), TRUE);
        }

        if ((kv->flag & VAR_FLAG_INSENSITIVE) != 0)
        {
            gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE);
            gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE);
        }

        if ((kv->flag & VAR_FLAG_PASSWORD) != 0)
            gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);

        if ((kv->flag & VAR_FLAG_FOCUS) != 0)
            to_grab_focus = entry;


        kv->user_data = (gpointer) entry;

        if ((kv->flag & VAR_FLAG_ADVANCED) != 0)
        {
            GtkWidget *hbox = gtk_hbox_new(FALSE, 5);
            GtkWidget *align;
            GtkWidget *label;

            need_advanced = TRUE;
            is_advanced = TRUE;

            gtk_box_pack_end_defaults(GTK_BOX(hbox), entry);

            if (need_label)
            {
                align = gtk_alignment_new(0, 0.5, 0, 0);
                label = gtk_label_new_with_mnemonic(kv->description);
                gtk_container_add(GTK_CONTAINER(align), label);
                gtk_box_pack_end_defaults(GTK_BOX(hbox), align);
            }

            gtk_box_pack_start_defaults(GTK_BOX(adv_vbox), hbox);
        }

        if (need_label && !is_advanced)
        {
            GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0);
            GtkWidget *label = gtk_label_new_with_mnemonic(kv->description);

            gtk_container_add(GTK_CONTAINER(align), label);
            gtk_table_attach_defaults(GTK_TABLE(tab), align, 0, 1, actR, actR + 1);

            if (entry)
                gtk_table_attach_defaults(GTK_TABLE(tab), entry, 1, 2, actR, actR + 1);

        }
        else if (!is_advanced)
        {
            gtk_table_attach(GTK_TABLE(tab), entry, actC, actC + 2, actR, actR + 1, GTK_FILL, GTK_SHRINK, 0, 0);
        }


        if (!is_advanced)
        {
            if ((actC + 1) < cols)
                actC++;
            else
            {
                actC = 0;
                actR++;
            }
        }

        listtmp = listtmp->next;
    }

    if (need_advanced)
    {
        adv_expander = gtk_expander_new_with_mnemonic(_("_More options"));
        gtk_container_add(GTK_CONTAINER(adv_expander), adv_vbox);
        gtk_table_attach_defaults(GTK_TABLE(tab), adv_expander, 0, rows, actR, actR + 1);
    }
    else
    {
        gtk_widget_destroy(adv_vbox);
    }

    /* progress stuff */
    if (use_progress)
    {
        GtkWidget *progress = gtk_progress_bar_new();
        gtk_table_attach_defaults(GTK_TABLE(tab), progress, 0, rows, actR, actR + 1);
    }

    if (to_grab_focus)
        gtk_widget_grab_focus(GTK_WIDGET(to_grab_focus));

    return tab;
}
コード例 #11
0
/**
 * This is our callback for the receiving-im-msg signal.
 *
 * We return TRUE to block the IM, FALSE to accept the IM
 */
static gboolean receiving_im_msg_cb(GaimAccount * account, char **sender,
                                    char **buffer, int *flags, void *data)
{
    gboolean retval = FALSE;    /* assume the sender is allowed */
    gboolean found = FALSE;
    gint pos = -1;
    char *botmsg = NULL;


    PendingMessage *pending = NULL;
    GSList *slist = NULL;
    GSList *search = NULL;

    GaimConnection *connection = NULL;

    /* expire any old entries in pending */
    expire_pending_list();

    connection = gaim_account_get_connection(account);

    /* not good, but don't do anything */
    if (!connection || !sender) {
        return retval;
    }

    /* if there is already an open conversation, allowed it */
    if (gaim_find_conversation_with_account(*sender, account)) {
        return retval;
    }

    /* don't make buddies use the challenge/response system */
    if (gaim_find_buddy(account, *sender)) {
        return retval;
    }

    /* don't make permit list members use the challenge/response system */
    for (slist = account->permit; slist != NULL; slist = slist->next) {
        if (!gaim_utf8_strcasecmp
            (*sender, gaim_normalize(account, (char *) slist->data))) {
            return retval;
        }
    }

    /* if there is no question or no answer, allow the sender */
    const char *question =
        gaim_prefs_get_string("/plugins/core/bot/challenger/question");
    const char *answer =
        gaim_prefs_get_string("/plugins/core/bot/challenger/answer");
    if (!question || !answer) {
        return retval;
    }

    /* blank / null message ... can this even happen? */
    if (!*buffer) {
        return retval;
    }

    /* search if this sender is already in pending */
    for (search = pending_list; search; search = search->next) {
        pending = search->data;
        pos = g_slist_position(pending_list, search);

        if (protocmp(account, pending) && usercmp(account, pending)
            && sendercmp(*sender, pending)) {
            found = TRUE;
            break;
        }
    }

    if (!found) {
        /**
         * its the first time through, save the nick/msg to the
         * queue and ask the question
         */
        GTimeVal *now = NULL;
        now = g_new0(GTimeVal, 1);
        g_get_current_time(now);
        PendingMessage *newpend = NULL;

        newpend = g_new0(PendingMessage, 1);
        newpend->tv_sec = now->tv_sec;
        newpend->protocol = g_strdup(account->protocol_id);
        newpend->username = g_strdup(account->username);
        newpend->sender = g_strdup(*sender);
        newpend->message = g_strdup(*buffer);
        pending_list = g_slist_append(pending_list, newpend);

        botmsg =
            g_strdup_printf(_
                            ("Bot Challenger engaged:  you are now being ignored!  Your message will be delivered if you can correctly answer the following question within %i minutes:  %s"),
                            BOT_MAX_MINUTES, question);
        send_auto_reply(account, *sender, botmsg);

        g_free(now);
        g_free(botmsg);
        retval = TRUE;
    } else {
        if (gaim_utf8_strcasecmp(*buffer, answer)) {
                /**
                 * Sorry, thanks for playing, please try again
                 */
            retval = TRUE;
        } else {
            botmsg =
                _
                ("Bot Challenger accepted your answer and delivered your original message.  You may now speak freely.");
            send_auto_reply(account, *sender, botmsg);

            if (gaim_prefs_get_bool
                ("/plugins/core/bot/challenger/auto_add_permit")) {
                if (!gaim_privacy_permit_add(account, *sender, FALSE)) {
                    gaim_debug_info("bot-challenger",
                                    "Unable to add %s/%s/%s to permit list\n",
                                    *sender, pending->username,
                                    pending->protocol);
                }
            }

            /**
             * Free what is currently in the buffer (the correct answer)
             * and replace it with the user's first message that was
             * queued, pending the correct answer.  I think some other
             * process is supposed to free the buffer after its sent.
             */
            g_free(*buffer);
            *buffer = pending->message;

            /* Clean up everything else except pending->message */
            free_pending(search, FALSE);

            retval = FALSE;     /* Don't block this message */
        }
    }
    debug_pending_list();
    return retval;              /* returning TRUE will block the IM */
}
コード例 #12
0
ファイル: tslist.c プロジェクト: cdaffara/symbiandump-os2
// Tests for slist
void tg_slist_tests()
{
	GSList *slist,*st,*rem;
	gint nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	gint chk_buf[20];
	gint i;
	gint g_slist_insert_data;
	gint g_slist_insert_before_data;
	gint ip1 = 10;
	gint ip2 = 15;
	gint ip3 = 5;
	gint ip4 = 12;
	gint g_slist_nth_data_op,g_slist_find_custom_op;
	
	//Trying to use the allocators so that even they get tested!
	GAllocator* alloc = g_allocator_new ("alloc_slist",5000);
	g_slist_push_allocator (alloc);
	
	
	slist = NULL;
	for (i = 0; i < 10; i++)
		slist = g_slist_append (slist, &nums[i]);
	
	//List looks like:
	// 0   1   2   3   4   5   6   7   8   9
	
	//Test for g_slist_insert....inserted 10 at pos 4
	g_slist_insert(slist,&ip1,4);
	st = g_slist_nth (slist,0);
	for(i = 0;i < 4;i++)
		st = st->next;
	g_slist_insert_data = *((gint*) st->data);
	g_assert(g_slist_insert_data == 10);
	
/*	for (i = 0; i < 10; i++)
    {
      st = g_slist_nth (slist, i);
      chk_buf[i] = *((gint*) st->data);
    }*/
    
	//List looks like:
	// 0   1   2   3   10   4   5   6   7   8   9
	
	//Test for g_slist_insert_before....inserted 15 at pos 7
	st = g_slist_nth (slist,7);
	g_slist_insert_before(slist,st,&ip2);
	st = g_slist_nth (slist,0);
	for(i = 0;i < 7;i++)
		st = st->next;
	g_slist_insert_before_data = *((gint*) st->data);
	g_assert(g_slist_insert_before_data == 15);
	
	//List looks like:
	// 0   1   2   3   10   4   5   15   6   7   8   9
	
	//Test for g_slist_index....finding 15 at pos 7
	st = g_slist_nth (slist,0);
	g_assert(g_slist_index(st,&ip2)==7);

	//Test for g_slist_nth_data....getting 6 at position 8
	g_slist_nth_data_op = *((gint*) g_slist_nth_data(slist,8));
	g_assert(g_slist_nth_data_op == 6)	;

	//Test for g_slist_position
	st = g_slist_nth (slist,7);
	g_assert(g_slist_position (slist,st) == 7);

	//Test for g_slist_find_custom
	st = g_slist_find_custom(slist,&ip3,compare_fun_gr);
	g_slist_find_custom_op = *((gint*) st->data);
	g_assert(g_slist_find_custom_op == 5);
	
	//Test for g_slist_sort_with_data
	st = g_slist_sort_with_data(slist,compare_fun_gr_data,&ip3);
	for (i = 0; i < 10; i++)
    {
      st = g_slist_nth (slist, i);
      g_assert (*((gint*) st->data) == i);
    }

	//List looks like:
	// 0   1   2   3   4   5   6   7   8   9   10   15
	
	//Test for g_slist_remove_link
	st = g_slist_nth (slist, 5);
	rem = g_slist_remove_link(slist , st);
	st = g_slist_nth (slist, 5);
    g_assert (*((gint*) st->data) == 6);

	//List looks like:
	// 0   1   2   3   4   6   7   8   9   10   15

	//Test for g_slist_remove_all
	g_slist_insert(slist,&ip4,4);
	g_slist_insert(slist,&ip4,6);
	g_slist_insert(slist,&ip4,8);
	//List looks like:
	// 0   1   2   3   4   12   6   7   12   8   12   9   10   15
	g_slist_remove_all(slist ,&ip4);
    
	g_slist_free (slist);
	g_slist_pop_allocator ();
}