⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st-preferences.c

📁 linux下网络收音机的源码
💻 C
字号:
/* * Copyright (c) 2003, 2004 Jean-Yves Lefort * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of Jean-Yves Lefort nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */#include <gtk/gtk.h>#include "sg-util.h"#include "st-settings.h"/*** cpp *********************************************************************/#define STRING_PTR		"st-preferences-string-ptr"/*** function declarations ***************************************************/static void st_preferences_toggle_toggled_h	  (GtkToggleButton  *toggle,						   gpointer	    data);static gboolean st_preferences_entry_focus_out_h  (GtkWidget	    *widget,						   GdkEventFocus    *event,						   gpointer	    data);static void st_preferences_spin_value_changed_h   (GtkSpinButton    *spin,						   gpointer         data);static void st_preferences_radio_toggled_h        (GtkToggleButton  *toggle,						   gpointer         data);/*** implementation **********************************************************/voidst_preferences_bind_boolean (GtkToggleButton *toggle, gboolean *ptr){  g_return_if_fail(GTK_IS_TOGGLE_BUTTON(toggle));  g_return_if_fail(ptr != NULL);  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), *ptr);  g_signal_connect(toggle, "toggled", G_CALLBACK(st_preferences_toggle_toggled_h), ptr);}static voidst_preferences_toggle_toggled_h (GtkToggleButton *toggle, gpointer data){  gboolean *ptr = data;  g_return_if_fail(GTK_IS_TOGGLE_BUTTON(toggle));  g_return_if_fail(ptr != NULL);  G_LOCK(st_settings);  *ptr = gtk_toggle_button_get_active(toggle);  G_UNLOCK(st_settings);}voidst_preferences_bind_string (GtkEntry *entry, char **ptr){  g_return_if_fail(GTK_IS_ENTRY(entry));  g_return_if_fail(ptr != NULL);  gtk_entry_set_text(entry, *ptr ? *ptr : "");  g_object_set_data(G_OBJECT(entry), STRING_PTR, ptr);  g_signal_connect(entry, "focus-out-event", G_CALLBACK(st_preferences_entry_focus_out_h), NULL);}voidst_preferences_commit_string (GtkEntry *entry){  char **ptr;  const char *str;  g_return_if_fail(GTK_IS_ENTRY(entry));  ptr = g_object_get_data(G_OBJECT(entry), STRING_PTR);  g_return_if_fail(ptr != NULL);  str = gtk_entry_get_text(entry);  G_LOCK(st_settings);  g_free(*ptr);  *ptr = str[0] ? g_strdup(str) : NULL;  G_UNLOCK(st_settings);}static gbooleanst_preferences_entry_focus_out_h (GtkWidget *widget,				  GdkEventFocus *event,				  gpointer data){  st_preferences_commit_string(GTK_ENTRY(widget));  return FALSE;			/* propagate event */}voidst_preferences_bind_int_spin (GtkSpinButton *spin, int *ptr){  g_return_if_fail(GTK_IS_SPIN_BUTTON(spin));  g_return_if_fail(ptr != NULL);  gtk_spin_button_set_value(spin, *ptr);  g_signal_connect(spin, "value-changed", G_CALLBACK(st_preferences_spin_value_changed_h), ptr);}static voidst_preferences_spin_value_changed_h (GtkSpinButton *spin, gpointer data){  int *ptr = data;  g_return_if_fail(GTK_IS_SPIN_BUTTON(spin));  g_return_if_fail(ptr != NULL);  G_LOCK(st_settings);  *ptr = gtk_spin_button_get_value_as_int(spin);  G_UNLOCK(st_settings);}voidst_preferences_bind_int_radio (GtkRadioButton *radio, int *ptr, int value){  g_return_if_fail(GTK_IS_RADIO_BUTTON(radio));  g_return_if_fail(ptr != NULL);  g_object_set_data(G_OBJECT(radio), "value", GINT_TO_POINTER(value));  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), value == *ptr);  g_signal_connect(radio, "toggled", G_CALLBACK(st_preferences_radio_toggled_h), ptr);}static voidst_preferences_radio_toggled_h (GtkToggleButton *toggle, gpointer data){   g_return_if_fail(GTK_IS_TOGGLE_BUTTON(toggle));  if (gtk_toggle_button_get_active(toggle))    {      int *ptr = data;            g_return_if_fail(ptr != NULL);            G_LOCK(st_settings);      *ptr = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toggle), "value"));      G_UNLOCK(st_settings);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -