3.2. gg-types.h

3.2.1. GGaduMenuItem


typedef struct {
  gchar    *label; a
  gpointer data;
  gpointer callback;
} GGaduMenuItem;

typedef GNode GGaduMenu;

label przechowuje tekst, który jest wyświetlany w menu. Znak "_" określa, że następujący po nim znak jest tzw. akceleratorem (czyt. skrótem).

3.2.2. GGaduVar


typedef struct {
  gchar   *name;
  gint     type;
  gpointer ptr;
} GGaduVar;

label zawiera nazwę zmiennej, type jej typ, a ptr wskaźnik do pamięci, gdzie jest/będzie przechowywana dana zmienna.

3.2.3. GGaduProtocol


typedef struct {
  gchar  *display_name;
  gchar  *img_filename;
  GSList *statuslist;
  gint    offline_status;
} GGaduProtocol;

display_name przechowuje nazwę protokołu, która jest wyświetlana na liście protokołów. img_filename jest ścieżką do obrazka z etykietą na zakładkę (taki pionowy tekst pojawiający się na zakładce). statuslist przechowuje listę wszystkich dostępnych stanów danego protokołu (np. dostępny, niedostępny, zajęty). offline_status określa, który ze stanów oznacza, że protokół nie ma połączenia z serwerem (jest w stanie offline).

3.2.4. GGaduSignal


typedef struct {
  gpointer name;
  gpointer source_plugin_name;
  gpointer destination_plugin_name;
  gpointer data;
  gpointer data_return;
  gint error;
  gboolean free_me;
  void (*free)(gpointer signal);
} GGaduSignal;

name przechowuje nazwę sygnału, np. "gui show warning".

source_plugin_name przechowuje nazwę pluginu, z którego został wysłany sygnał. Służy on m.in. do identyfikacji pluginu, w przypadku konieczności wysłania sygnału zwrotnego.

destination_plugin_name zawiera nazwę pluginu, który otrzyma sygnał. Może to być zwykła nazwa, NULL lub nazwa z tzw. wildcard. Jeśli jest to zwykła nazwa (np. "main-gui"), to tylko ten plugin otrzyma sygnał. Jeśli destination_plugin_name jest równe NULL, to sygnał zostanie wysłany do każdego załadowanego pluginu. Jeśli zostało użyta tzw. wildcard (np. "sound*"), to sygnał jest wysyłany do każdego pluginu pasującego do maski. Przykładowo, jeśli mamy "sound*" oraz załadowane pluginy sound-oss i sound-esd, to sygnał zostanie wysłany do tych dwóch pluginów.

data przechowuje wskaźnik do danych towarzyszących sygnałowi. Jeśli wyborazisz sobie sygnał jako zwykłą funkcję, to data będzie argumentem tej funkcji.

data_return jest wskaźnikiem do danych zwróconych przez funkcję obsługi sygnału. Jeśli znowu uruchomisz wyobraźnię, to data_return jest zmienną zwracaną przez funkcję za pośrednictwem return.

3.2.5. GGaduSignalInfo


typedef struct {
  gpointer name;
} GGaduSignalInfo;

3.2.6. GGaduPlugin


typedef struct {
  guint    type;
  gchar   *name;
  gchar   *description;
  gpointer ptr;
  void    *plugin_so_handler;

  gchar  *config_file;
  GSList *variables;
  GSList *signals;

  GGaduProtocol *protocol;

  void (*signal_receive_func)(gpointer,gpointer);
  void (*destroy_plugin)();
  void (*start_plugin)();
} GGaduPlugin;

type określa typ pluginu (czy jest to protokół, gui, inny). name przechowuje nazwę pluginu. description jest krótkim opisem pluginu. ptr to wskaźnik na strukturę charakterystyczną dla pluginu (np. protokołu). plugin_so_handler jest wskaźnikiem zwróconym przez dlopen.

config_file określa plik konfiguracyjny danego pluginu. variables jest listą zmiennych wczytanych z pliku konfiguracyjnego. signals jest listą sygnałów akceptowanych przez plugin.

protocol to specyficzna dla każdego pluginu struktura.

signal_receive_func jest wskaźnikiem do funkcji odbierającej sygnały dla danego pluginu. destroy_plugin jest wskaźnikiem do funkcji zwalniającej pamięć i czyszczącej po pluginie. start_plugin jest wskaźnikiem do funkcji uruchamiającej plugin.

3.2.7. GGaduPluginFile


typedef struct {
    gchar *name;
    gchar *path;
} GGaduPluginFile;

name jest nazwą pluginu, natomiast path ścieżką do pliku so pluginu.

3.2.8. GGaduConfig


typedef struct {
  gboolean send_on_enter;
  guint main_on_start;
  guint width;
  guint height;
  gint pos_x;
  gint pos_y;
  GSList *all_available_plugins;
  GSList *plugins;

  gchar  *configdir;
  GSList *waiting_signals;
  gboolean all_plugins_loaded;
  GMainLoop *main_loop;

  GSource *signals_source;
} GGaduConfig;