static void client_join_room(GGZRoom *room) { gchar *err_msg = NULL; gint singleclick, status = -1; if(ggzcore_server_get_cur_room(ggz_gtk.server) == room) { /* ignore silently that we're already in this room */ return; } switch (ggzcore_server_get_state(ggz_gtk.server)) { case GGZ_STATE_OFFLINE: case GGZ_STATE_CONNECTING: case GGZ_STATE_ONLINE: case GGZ_STATE_LOGGING_IN: case GGZ_STATE_LOGGING_OUT: err_msg = _("You can't join a room; you're not logged in"); break; case GGZ_STATE_BETWEEN_ROOMS: case GGZ_STATE_ENTERING_ROOM: err_msg = _("You're already inbetween rooms"); break; case GGZ_STATE_JOINING_TABLE: case GGZ_STATE_AT_TABLE: case GGZ_STATE_LEAVING_TABLE: err_msg = _("You can't switch rooms while playing a game"); break; case GGZ_STATE_IN_ROOM: case GGZ_STATE_LOGGED_IN: status = 0; break; default: err_msg = _("Unknown error"); status = -1; } if (status == 0) { if (ggzcore_server_join_room(ggz_gtk.server, room) == 0) { /* Only desensitize with single click, dues to some weird bug that freezes the mouse if we doubleclick and then desensitize */ singleclick = ggzcore_conf_read_int("OPTIONS", "ROOMENTRY", FALSE); if (singleclick) { /* Set roomlist insensitive */ sensitize_room_list(FALSE); } return; } else { err_msg = _("Error joining room"); } } /* If we get here, there was an error */ msgbox(err_msg, _("Error joining room"), MSGBOX_OKONLY, MSGBOX_STOP, MSGBOX_NORMAL); }
static gboolean room_list_event(GtkWidget *widget, GdkEvent *event, gpointer data) { GdkEventButton *buttonevent = (GdkEventButton *) event; GtkTreeView *tree = GTK_TREE_VIEW(widget); GtkTreeModel *model = gtk_tree_view_get_model(tree); gboolean single_join; GtkWidget *menu; GtkTreeIter iter; GGZRoom *room; GtkTreePath *path = NULL; if (!gtk_tree_view_get_path_at_pos(tree, buttonevent->x, buttonevent->y, &path, NULL, NULL, NULL)) { return FALSE; } gtk_tree_model_get_iter(model, &iter, path); single_join = ggzcore_conf_read_int("OPTIONS", "ROOMENTRY", FALSE); gtk_tree_model_get(model, &iter, ROOM_COLUMN_PTR, &room, -1); if (!room) return FALSE; switch(event->type) { case GDK_2BUTTON_PRESS: /* Double click */ if (buttonevent->button == 1 && !single_join) { client_join_room(room); return TRUE; } break; case GDK_BUTTON_PRESS: /* Single click */ if (buttonevent->button == 1 && single_join) { client_join_room(room); return TRUE; } else if (buttonevent->button == 3) { /* Right mouse button */ /* Create and display the menu */ menu = create_mnu_room(room); gtk_widget_show_all(menu); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, buttonevent->button, 0); } break; default: /* Some Other event */ break; } return FALSE; }
void server_profiles_load(void) { guint i, count; char** profiles; Server* server; /* Clear any previous list */ if (servers) { g_list_foreach(servers, server_free_node, NULL); g_list_free(servers); servers = NULL; } /* Clear list of deleted servers */ if (deleted) { g_list_foreach(deleted, server_free_node, NULL); g_list_free(deleted); deleted = NULL; } ggzcore_conf_read_list("Servers", "ProfileList", (int*)&count, &profiles); for (i = 0; i < count; i++) { server = ggz_malloc(sizeof(Server)); server->name = profiles[i]; server->host = ggzcore_conf_read_string(server->name, "Host", NULL); server->port = ggzcore_conf_read_int(server->name, "Port", 5688); server->type = ggzcore_conf_read_int(server->name, "Type", GGZ_LOGIN_GUEST); server->login = ggzcore_conf_read_string(server->name, "Login", NULL); if (server->type == GGZ_LOGIN) server->password = ggzcore_conf_read_string(server->name, "Password", NULL); server_list_add(server); } server_list_print(); if (profiles) ggz_free(profiles); }