Mercurial > geeqie
annotate src/lirc.c @ 609:b690cecbf5b8
Use function(void) instead of function() for declaring functions which
do not take any parameters at all.
It respects current Geeqie coding style more.
| author | zas_ |
|---|---|
| date | Fri, 09 May 2008 07:32:30 +0000 |
| parents | e8b28413ffbf |
| children | 33a375d16181 |
| rev | line source |
|---|---|
| 528 | 1 #include "lirc.h" |
| 2 | |
| 3 #ifdef HAVE_LIRC | |
| 4 #include <lirc/lirc_client.h> | |
| 5 #include "layout_image.h" | |
| 6 #include "debug.h" | |
| 7 | |
| 8 gint lirc_fd = -1; | |
| 9 struct lirc_config *config = NULL; | |
| 10 guint input_tag; | |
| 11 GIOChannel *gio_chan; | |
| 12 | |
| 13 /* | |
| 14 *----------------------------------------------------------------------------- | |
| 15 * LIRC callback | |
| 16 *----------------------------------------------------------------------------- | |
| 17 */ | |
| 18 | |
|
609
b690cecbf5b8
Use function(void) instead of function() for declaring functions which
zas_
parents:
603
diff
changeset
|
19 void lirc_cleanup(void) |
| 528 | 20 { |
| 21 if (config) | |
| 22 { | |
| 603 | 23 g_source_remove(input_tag); |
| 528 | 24 lirc_freeconfig(config); |
| 25 config = NULL; | |
| 26 } | |
| 27 if (lirc_fd != -1) | |
| 28 { | |
| 29 lirc_deinit(); | |
| 30 lirc_fd = -1; | |
| 31 } | |
| 32 if (gio_chan) | |
| 33 { | |
| 603 | 34 g_io_channel_shutdown(gio_chan, TRUE, NULL); |
| 35 g_io_channel_unref(gio_chan); | |
| 528 | 36 } |
| 37 } | |
| 38 | |
| 39 gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition, | |
| 40 gpointer data) | |
| 41 { | |
| 42 LayoutWindow *lw = data; | |
| 43 gchar *ptr; | |
| 44 gint ret; | |
| 45 gint x = 0; | |
| 46 gint y = 0; | |
| 47 | |
| 48 /* LIRC code and corresponding geeqie command (and parameters)*/ | |
| 49 gchar *code; | |
| 50 gchar *cmd; | |
| 51 | |
| 52 /* parameters for geeqie command */ | |
| 53 gint i_parm; | |
| 54 gfloat fl_parm; | |
| 55 | |
| 56 while ((ret = lirc_nextcode(&code)) == 0 && code) | |
| 57 { | |
| 58 while ((ret = lirc_code2char(config, code, &cmd)) == 0 && cmd) | |
| 59 { | |
| 603 | 60 if (g_ascii_strncasecmp("LEFT", cmd, 4) == 0) |
| 528 | 61 { |
| 62 ptr = cmd + 4; | |
| 63 while (g_ascii_isspace(*ptr)) ptr++; | |
| 64 i_parm = atoi(ptr); | |
| 65 | |
| 66 if (i_parm <= 0) i_parm = 1; | |
| 67 x -= i_parm; | |
| 68 } | |
| 603 | 69 else if (g_ascii_strncasecmp("RIGHT", cmd, 5) == 0) |
| 528 | 70 { |
| 71 ptr = cmd + 5; | |
| 72 while (g_ascii_isspace(*ptr)) ptr++; | |
| 73 i_parm = atoi(ptr); | |
| 74 | |
| 75 if (i_parm <= 0) i_parm = 1; | |
| 76 x += i_parm; | |
| 77 } | |
| 603 | 78 else if (g_ascii_strncasecmp("UP", cmd, 2) == 0) |
| 528 | 79 { |
| 80 ptr = cmd + 2; | |
| 81 while (g_ascii_isspace(*ptr)) ptr++; | |
| 82 i_parm = atoi(ptr); | |
| 83 | |
| 84 if (i_parm <= 0) i_parm = 1; | |
| 85 y -= i_parm; | |
| 86 } | |
| 603 | 87 else if (g_ascii_strncasecmp("DOWN", cmd, 4) == 0) |
| 528 | 88 { |
| 89 ptr = cmd + 4; | |
| 90 while (g_ascii_isspace(*ptr)) ptr++; | |
| 91 i_parm = atoi(ptr); | |
| 92 | |
| 93 if (i_parm <= 0) i_parm = 1; | |
| 94 y += i_parm; | |
| 95 } | |
| 603 | 96 else if (g_ascii_strcasecmp("PREV", cmd) == 0) |
| 528 | 97 { |
| 98 layout_image_prev(lw); | |
| 99 } | |
| 603 | 100 else if (g_ascii_strcasecmp("NEXT", cmd) == 0) |
| 528 | 101 { |
| 102 layout_image_next(lw); | |
| 103 } | |
| 603 | 104 else if (g_ascii_strncasecmp("ZOOM_IN", cmd, 7) == 0) |
| 528 | 105 { |
| 106 ptr = cmd + 7; | |
| 107 while (g_ascii_isspace(*ptr)) ptr++; | |
| 108 fl_parm = atoi(ptr) / 10.0; | |
| 109 | |
| 110 if (fl_parm <= 0.01) fl_parm = get_zoom_increment(); | |
| 111 layout_image_zoom_adjust(lw, fl_parm); | |
| 112 } | |
| 603 | 113 else if (g_ascii_strncasecmp("ZOOM_OUT", cmd, 8) == 0) |
| 528 | 114 { |
| 115 ptr = cmd + 8; | |
| 116 while (g_ascii_isspace(*ptr)) ptr++; | |
| 117 fl_parm = atoi(ptr) / 10.0; | |
| 118 | |
| 119 if (fl_parm <= 0.01) fl_parm = get_zoom_increment(); | |
| 120 layout_image_zoom_adjust(lw, -fl_parm); | |
| 121 } | |
| 603 | 122 else if (g_ascii_strcasecmp("ZOOM_MAX", cmd) == 0) |
| 528 | 123 { |
| 124 layout_image_zoom_set(lw, 0.0); | |
| 125 } | |
| 603 | 126 else if (g_ascii_strncasecmp("SET_ZOOM", cmd, 8) == 0) |
| 528 | 127 { |
| 128 ptr = cmd + 8; | |
| 129 while (g_ascii_isspace(*ptr)) ptr++; | |
| 130 i_parm = atoi(ptr); | |
| 131 | |
| 132 if (i_parm <= 0) i_parm = 1; | |
| 133 layout_image_zoom_set(lw, 1.0); | |
| 134 } | |
| 603 | 135 else if (g_ascii_strncasecmp("SET_INV_ZOOM", cmd, 12) == 0) |
| 528 | 136 { |
| 137 ptr = cmd + 12; | |
| 138 while (g_ascii_isspace(*ptr)) ptr++; | |
| 139 i_parm = atoi(ptr); | |
| 140 | |
| 141 if (i_parm <= 0) i_parm = 1; | |
| 142 layout_image_zoom_set(lw, -i_parm); | |
| 143 } | |
| 603 | 144 else if (g_ascii_strcasecmp("FIRST", cmd) == 0) |
| 528 | 145 { |
| 146 layout_image_first(lw); | |
| 147 } | |
| 603 | 148 else if (g_ascii_strcasecmp("LAST", cmd) == 0) |
| 528 | 149 { |
| 150 layout_image_last(lw); | |
| 151 } | |
| 603 | 152 else if (g_ascii_strcasecmp("PAUSE", cmd) == 0) |
| 528 | 153 { |
| 154 layout_image_slideshow_pause_toggle(lw); | |
| 155 } | |
| 603 | 156 else if (g_ascii_strcasecmp("ROTATE_90", cmd) == 0) |
| 528 | 157 { |
| 158 layout_image_alter(lw, ALTER_ROTATE_90); | |
| 159 } | |
| 603 | 160 else if (g_ascii_strcasecmp("ROTATE_90_CC", cmd) == 0) |
| 528 | 161 { |
| 162 layout_image_alter(lw, ALTER_ROTATE_90_CC); | |
| 163 } | |
| 603 | 164 else if (g_ascii_strcasecmp("INFO", cmd) == 0) |
| 528 | 165 { |
| 166 layout_image_overlay_toggle(lw); | |
| 167 } | |
| 603 | 168 else if (g_ascii_strcasecmp("EXIT", cmd) == 0) |
| 528 | 169 { |
| 170 exit_program(); | |
| 171 } | |
| 172 } | |
| 173 free(code); | |
| 174 if (ret == -1) break; | |
| 175 } | |
| 176 if (x != 0 || y!= 0) | |
| 177 { | |
| 178 layout_image_scroll(lw, x, y); | |
| 179 } | |
| 180 | |
| 181 if (ret == -1) | |
| 182 { | |
| 183 /* something went badly wrong */ | |
| 184 fprintf(stderr, _("disconnected from LIRC\n")); | |
| 185 lirc_cleanup(); | |
| 186 return (gboolean)FALSE; | |
| 187 } | |
| 188 return (gboolean)TRUE; | |
| 189 } | |
| 190 | |
| 191 void layout_image_lirc_init(LayoutWindow *lw) | |
| 192 { | |
| 193 int flags; | |
| 194 | |
| 195 DEBUG_1("Initializing LIRC..."); | |
| 196 lirc_fd = lirc_init(GQ_APPNAME_LC, get_debug_level() > 0); | |
| 197 if (lirc_fd == -1) | |
| 198 { | |
| 199 fprintf(stderr, _("Could not init LIRC support\n")); | |
| 200 return; | |
| 201 } | |
| 202 if (lirc_readconfig(NULL, &config, NULL) == -1) | |
| 203 { | |
| 204 lirc_deinit(); | |
| 205 fprintf(stderr, | |
| 206 _("could not read LIRC config file\n" | |
| 207 "please read the documentation of LIRC to \n" | |
| 208 "know how to create a proper config file\n")); | |
| 209 return; | |
| 210 } | |
| 211 gio_chan = g_io_channel_unix_new(lirc_fd); | |
| 212 input_tag = g_io_add_watch(gio_chan, G_IO_IN, | |
| 213 lirc_input_callback, lw); | |
| 214 fcntl(lirc_fd, F_SETOWN, getpid()); | |
| 215 flags = fcntl(lirc_fd, F_GETFL, 0); | |
| 216 if (flags != -1) fcntl(lirc_fd, F_SETFL, flags|O_NONBLOCK); | |
| 217 fflush(stderr); | |
| 218 } | |
| 219 | |
| 220 #endif /* HAVE_LIRC */ |
